概要
Qt 5.2以降では、QCommandLineParser
クラスとQCommandLineOption
クラスが追加され、コマンドライン引数の扱いが簡潔になっている。
また、QCoreApplication
クラスのarguments
メソッドを使用することでも、コマンドライン引数を扱うことができる。
ここでは、これらのクラスの使用方法について記載する。
併せて、デバッグ時のみ使用するコマンドライン引数の設定方法も記載する。
QCommandLineParserクラスの使用
以下の例では、QCommandLineParser
クラスを使用して、指定されたオプションを処理している。
- QCommandLineParserクラスを使用してコマンドラインオプションを定義する。
- -hオプション、--helpオプション、-vオプション、--versionオプションは、その後に続く値が不要なため、Qtにより自動的に処理される。
- -cオプション、--configオプションを追加で定義して、値を受け取るように指定する。
- 上記に存在しないオプションが指定された場合、それらを表示する。
#include <QCoreApplication>
#include <QCommandLineParser>
#include <QCommandLineOption>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QCoreApplication::setApplicationName("<任意のアプリケーション名>");
QCoreApplication::setApplicationVersion("1.0");
QCommandLineParser parser;
parser.setApplicationDescription("Command line options example");
// バージョンオプション
QCommandLineOption versionOption(QStringList() << "v" << "version", "Displays version information.");
parser.addOption(versionOption);
// ヘルプオプション
QCommandLineOption helpOption(QStringList() << "h" << "help", "Displays help information.");
parser.addOption(helpOption);
// 設定オプション
QCommandLineOption configOption(QStringList() << "c" << "config", "Display the configuration string.", "config");
parser.addOption(configOption);
parser.process(a);
if (parser.isSet(helpOption)) {
parser.showHelp();
return 0;
}
if (parser.isSet(versionOption)) {
qDebug() << QCoreApplication::applicationName() << QCoreApplication::applicationVersion();
return 0;
}
if (parser.isSet(configOption)) {
QString configString = parser.value(configOption);
qDebug() << "Configuration: " << configString;
return 0;
}
// 不明なオプションの場合
QStringList unknownOptions = parser.unknownOptionNames();
if (!unknownOptions.isEmpty()) {
for (const QString &option : unknownOptions) {
qDebug() << "不明なオプション: " << option;
}
return -1;
}
qDebug() << "有効なオプションはありません。使用法については、-h または --help を使用してください。";
return 0;
}
# 実行 <実行ファイル名> -h または <実行ファイル名> --help ヘルプ情報を表示する <実行ファイル名> -v または <実行ファイル名> --version バージョン情報を表示する <実行ファイル名> -c "<任意の文字列>" または <実行ファイル名> --config "<任意の文字列>" 指定された設定文字列を表示する <実行ファイル名> -x "不明なオプション: x" と表示する
※注意
QCommandLineParser
クラスは、様々なケースに対応できるような構造になっている。
詳細は、QCommandLineParser
とQCommandLineOption
のドキュメントを参照すること。
また、他の使用方法については、qtbase/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cppのテストケースを参照すること。
QCoreApplicationクラスを使用する方法
上記とは別の方法として、QCoreApplication::arguments()
を使用することもできる。
QCoreApplication::arguments()
の型はQStringList
であるため、簡単に取得および加工することができる。
以下の3つの例では、全てのコマンドライン引数をQStringList
クラスで取得して表示している。
コマンドライン引数の1つ目の要素を削除している理由は、1つ目の引数にはソフトウェアのパスが渡されるからである。
// 方法 1
QStringList argv = QCoreApplication::arguments();
argv.removeAt(0);
for(QString arg : argv)
{
qDebug() << "argument = " << arg;
}
// 方法 2
QStringList argv = QCoreApplication::arguments();
for(int i = 1; i < arguments.count(); i++)
{
qDebug() << "argument = " << arguments.at(i);
}
// 方法 3
QStringList argv = QCoreApplication::arguments();
argv.removeAt(0);
foreach(QString const &arg, arguments)
{
qDebug() << arg;
}
デバッグ時におけるコマンドライン引数の設定
- Qt Creatorを起動して、任意のQtプロジェクトを開く。
- Qt Creatorのメイン画面左にある[プロジェクト]アイコン - [Build & Run]セクション - [Run]項目を選択して、[実行時の設定]画面を表示する。
- [実行時の設定]画面から、[実行]セクション - [コマンドライン引数:]項目に、コマンドライン引数を記述する。
コマンドライン引数の記述方法は、以下の通りである。
# 各引数は半角スペースで区切る hoge piyo fuga # 引数の内容に空白が入っている場合は、ダブルクォーテーション""で囲む "hoge piyo" fuga # 引数の内容にダブルクォーテーション""が入っている場合は、直前にエスケープシーケンスを記述する "hoge \" piyo" fuga