LoginSignup
1

More than 5 years have passed since last update.

【Qt】QCommandLineParserを使う

Posted at

簡単なUDP受信アプリケーションのIPアドレスとポートをコマンドラインで設定できるようにしました。

-aまたは--addressでIPアドレスを、-pまたは--portでポート番号を設定できます。
何も設定しない場合は、デフォルト値(IPアドレス:0.0.0.0, ポート番号:45454)が使われます。
また、addHelpOption()で、-hしたときのヘルプを勝手に作ってくれます。
今回は実装していないですが、不正なオプション指定も簡単に検出できます。

#include <QCoreApplication>
#include <QtCore/QCommandLineParser>
#include <QtCore/QDebug>

int main(int argc, char *argv[]) {
  QCoreApplication app(argc, argv);
  QCoreApplication::setApplicationName("udp_receiver");
  QCoreApplication::setApplicationVersion("1.0");

  QCommandLineParser parser;
  parser.setApplicationDescription("Receive UDP datagram.");
  parser.addHelpOption();
  parser.addVersionOption();
  parser.addOptions({
      {{"a", "address"}, 
        QCoreApplication::translate("main", "Host address. Default: 0.0.0.0"),
        QCoreApplication::translate("main", "address"),
        QCoreApplication::translate("main", "0.0.0.0")},
      {{"p", "port"}, 
        QCoreApplication::translate("main", "Port. Default: 45454"),
        QCoreApplication::translate("main", "port"),
        QCoreApplication::translate("main", "45454")}
  });

  parser.process(app);
  const QString addr = parser.value("address");
  const quint16 port = parser.value("port").toUInt();
  qDebug() << "UDP receiver starts" << addr << "(" << port << ")";

  // 以下、UDPレシーバのコードは省略

  return app.exec();
}
./udp_receiver -h
Usage: ./udp_receiver/release/udp_receiver [options]
Receive UDP datagram.

Options:
  -h, --help               Displays this help.
  -v, --version            Displays version information.
  -a, --address <address>  Host address. Default: 0.0.0.0
  -p, --port <port>        Port. Default: 45454
./udp_receiver
UDP receiver starts  "0.0.0.0" ( 45454 ) #デフォルト値
./udp_receiver -a 192.168.1.3 -p 8888
UDP receiver starts  "192.168.1.3" ( 8888 ) #設定値

便利です♪

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1