「Qtの設定 - コマンドライン引数」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
編集の要約なし
7行目: 7行目:
<br><br>
<br><br>


== QCommandLineParserクラスとQCommandLineOptionを使用する方法 ==
== QCommandLineParserクラスの使用 ==
以下のサンプルコードでは、<code>sl</code>コマンドのオプションに倣って、<code>-a</code>、<code>-l</code>、<code>-F</code>、<code>-h/–help</code>を解析している。<br>
以下の例では、<code>QCommandLineParser</code>クラスを使用して、指定されたオプションを処理している。<br>
<br>
* QCommandLineParserクラスを使用してコマンドラインオプションを定義する。
* -hオプション、--helpオプション、-vオプション、--versionオプションは、その後に続く値が不要なため、Qtにより自動的に処理される。
* -cオプション、--configオプションを追加で定義して、値を受け取るように指定する。
* 上記に存在しないオプションが指定された場合、それらを表示する。
<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  #include <QtCore/QCoreApplication>
  #include <QCoreApplication>
  #include <QtCore/QCommandLineParser>
  #include <QCommandLineParser>
  #include <QtCore/QDebug>
  #include <QCommandLineOption>
#include <QDebug>
   
   
  int main(int argc, char *argv[])
  int main(int argc, char *argv[])
  {
  {
     QCoreApplication app(argc, argv);
     QCoreApplication a(argc, argv);
     app.setApplicationName(QStringLiteral("sl - correct miss typing"));
     QCoreApplication::setApplicationName("<任意のアプリケーション名>");
    QCoreApplication::setApplicationVersion("1.0");
   
   
     QCommandLineParser parser;
     QCommandLineParser parser;
     parser.setApplicationDescription(QStringLiteral("sl is a highly developed animation program, which corrects your miss typing."));
     parser.setApplicationDescription("Command line options example");
     parser.addHelpOption();
    // バージョンオプション
    QCommandLineOption versionOption(QStringList() << "v" << "version", "Displays version information.");
    parser.addOption(versionOption);
    // ヘルプオプション
    QCommandLineOption helpOption(QStringList() << "h" << "help", "Displays help information.");
     parser.addOption(helpOption);
   
   
     QCommandLineOption accidents(QStringLiteral("a"), QStringLiteral("It seems some accidents have happened. People give sad cries."));
    // 設定オプション
     parser.addOption(accidents);
     QCommandLineOption configOption(QStringList() << "c" << "config", "Display the configuration string.", "config");
     parser.addOption(configOption);
   
   
    QCommandLineOption smaller(QStringLiteral("l"), QStringLiteral("Becomes smaller."));
     parser.process(a);
    parser.addOption(smaller);
 
    QCommandLineOption fly(QStringLiteral("F"), QStringLiteral("Flies."));
     parser.addOption(fly);
   
   
     parser.process(app);
     if (parser.isSet(helpOption)) {
      parser.showHelp();
      return 0;
    }
   
   
     if (parser.isSet(accidents))
     if (parser.isSet(versionOption)) {
    {
       qDebug() << QCoreApplication::applicationName() << QCoreApplication::applicationVersion();
       qDebug() << "Help!";
      return 0;
     }
     }
   
   
     if (parser.isSet(smaller))
     if (parser.isSet(configOption)) {
    {
      QString configString = parser.value(configOption);
       qDebug() << "smaller";
       qDebug() << "Configuration: " << configString;
      return 0;
     }
     }
   
   
     if (parser.isSet(fly))
    // 不明なオプションの場合
    {
    QStringList unknownOptions = parser.unknownOptionNames();
      qDebug() << "I can fly!";
     if (!unknownOptions.isEmpty()) {
      for (const QString &option : unknownOptions) {
          qDebug() << "不明なオプション: " << option;
      }
      return -1;
     }
     }
   
   
    qDebug() << "有効なオプションはありません。使用法については、-h または --help を使用してください。";
     return 0;
     return 0;
  }
  }
54行目: 75行目:
<br>
<br>
  # 実行
  # 実行
./sl
./sl -a
./sl -l
./sl -a -l
./sl -al
./sl -h
./sl -S
# 結果
Help!
smaller
Help!
smaller
   
   
  Help!
  <実行ファイル名> -h または <実行ファイル名> --help
  smaller
  ヘルプ情報を表示する
   
   
  Usage: ./sl [options]
  <実行ファイル名> -v または <実行ファイル名> --version
  sl is a highly developed animation program, which corrects your miss typing.
  バージョン情報を表示する
   
   
  Options:
  <実行ファイル名> -c "<任意の文字列>" または <実行ファイル名> --config "<任意の文字列>"
  -h, --help Displays this help.
  指定された設定文字列を表示する
  -a          It seems some accidents have happened. People give sad cries.
  -l          Becomes smaller.
  -F          Flies.
   
   
  Unknown option 'S'.
  <実行ファイル名> -x
"不明なオプション: x" と表示する
<br>
<br>
<u>※備考</u><br>
<u>※注意</u><br>
様々なケースに対応できるような構造になっている。<br>
<code>QCommandLineParser</code>クラスは、様々なケースに対応できるような構造になっている。<br>
詳細は、<code>[https://doc.qt.io/qt-5/qcommandlineparser.html QCommandLineParser]</code>と<code>[https://doc.qt.io/qt-5/qcommandlineoption.html QCommandLineOption]</code>のドキュメントを参照すること。<br>
詳細は、<code>[https://doc.qt.io/qt-5/qcommandlineparser.html QCommandLineParser]</code>と<code>[https://doc.qt.io/qt-5/qcommandlineoption.html QCommandLineOption]</code>のドキュメントを参照すること。<br>
また、他の使用方法については、[https://code.qt.io/cgit/qt/qtbase.git/tree/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp qtbase/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp]のテストケースを参照すること。<br>
また、他の使用方法については、[https://code.qt.io/cgit/qt/qtbase.git/tree/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp qtbase/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp]のテストケースを参照すること。<br>

2024年8月28日 (水) 18:18時点における版

概要

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クラスは、様々なケースに対応できるような構造になっている。
詳細は、QCommandLineParserQCommandLineOptionのドキュメントを参照すること。
また、他の使用方法については、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;
 }



デバッグ時におけるコマンドライン引数の設定

  1. Qt Creatorを起動して、任意のQtプロジェクトを開く。
  2. Qt Creatorのメイン画面左にある[プロジェクト]アイコン - [Build & Run]セクション - [Run]項目を選択して、[実行時の設定]画面を表示する。
  3. [実行時の設定]画面から、[実行]セクション - [コマンドライン引数:]項目に、コマンドライン引数を記述する。


コマンドライン引数の記述方法は、以下の通りである。

# 各引数は半角スペースで区切る
hoge piyo fuga 

# 引数の内容に空白が入っている場合は、ダブルクォーテーション""で囲む
"hoge piyo" fuga

# 引数の内容にダブルクォーテーション""が入っている場合は、直前にエスケープシーケンスを記述する
"hoge \" piyo" fuga