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

ナビゲーションに移動 検索に移動
16行目: 16行目:
<br>
<br>
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
// CustomCommandLineParser.hファイル
  #include <QCoreApplication>
  #include <QCoreApplication>
  #include <QCommandLineParser>
  #include <QCommandLineParser>
  #include <QCommandLineOption>
  #include <QRegularExpression>
  #include <QDebug>
  #include <QDebug>
class CustomCommandLineParser : public QCommandLineParser
{
public:
    void process(const QStringList &arguments)
    {
      QStringList filteredArgs;
      static QRegularExpression validOptionRegex("^(-v|-h|-c|--version|--help|--config)(?:=.*)?$");
      for (const QString &arg : arguments) {
          if (validOptionRegex.match(arg).hasMatch()) {
            filteredArgs << arg;
          }
          else if (arg.startsWith("-")) {
            qDebug() << "不明なオプション:" << arg;
          }
          else {
            filteredArgs << arg;
          }
      }
      QCommandLineParser::process(filteredArgs);
    }
};
</syntaxhighlight>
<br>
<syntaxhighlight lang="c++">
// main.cppファイル
#include "CustomCommandLineParser.h"
   
   
  int main(int argc, char *argv[])
  int main(int argc, char *argv[])
27行目: 59行目:
     QCoreApplication::setApplicationVersion("1.0");
     QCoreApplication::setApplicationVersion("1.0");
   
   
     QCommandLineParser parser;
     CustomCommandLineParser parser;
     parser.setApplicationDescription("Command line options example");
     parser.setApplicationDescription("Command line options example");
   
   
    // バージョンオプション
     QCommandLineOption versionOption(QStringList() << "v" << "version", "Displays version information.");
     QCommandLineOption versionOption(QStringList() << "v" << "version", "Displays version information.");
     parser.addOption(versionOption);
     parser.addOption(versionOption);
   
   
    // ヘルプオプション
     QCommandLineOption helpOption(QStringList() << "h" << "help", "Displays help information.");
     QCommandLineOption helpOption(QStringList() << "h" << "help", "Displays help information.");
     parser.addOption(helpOption);
     parser.addOption(helpOption);
   
   
    // 設定オプション
     QCommandLineOption configOption(QStringList() << "c" << "config", "Display the configuration string.", "config");
     QCommandLineOption configOption(QStringList() << "c" << "config", "Display the configuration string.", "config");
     parser.addOption(configOption);
     parser.addOption(configOption);
   
   
     parser.process(a);
     parser.process(QCoreApplication::arguments());
 
     if (parser.isSet(helpOption)) {
     if (parser.isSet(helpOption)) {
       parser.showHelp();
       parser.showHelp();
60行目: 89行目:
     }
     }
   
   
     // 不明なオプションの場合
     if (parser.positionalArguments().isEmpty() && !parser.optionNames().isEmpty()) {
    QStringList unknownOptions = parser.unknownOptionNames();
       qDebug() << "有効なオプションはありません。使用法については、-h または --help を使用してください。";
    if (!unknownOptions.isEmpty()) {
       for (const QString &option : unknownOptions) {
          qDebug() << "不明なオプション: " << option;
      }
      return -1;
     }
     }
   
   
    qDebug() << "有効なオプションはありません。使用法については、-h または --help を使用してください。";
     return 0;
     return 0;
  }
  }

案内メニュー