【问题标题】:Using QApplication with command line arguments使用带有命令行参数的 QApplication
【发布时间】:2011-09-22 11:52:09
【问题描述】:
QApplication::QApplication ( int & argc, char ** argv )

初始化窗口系统并构造一个应用程序对象 在 argv 中使用 argc 命令行参数。

警告:argc 和 argv 引用的数据必须在 QApplication 对象的整个生命周期。 另外,argc 必须是 大于零且 argv 必须包含至少一个有效字符 字符串。

来自此链接:http://doc.qt.io/qt-4.8/qapplication.html#QApplication

可执行文件的参数是什么?有什么例子吗?

我尝试指定如下内容:

anisha@linux-dopx:~/Desktop/notes/qt> make
g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I../../../qtsdk-2010.05/qt/mkspecs/linux-g++-64 -I. -I../../../qtsdk-2010.05/qt/include/QtCore -I../../../qtsdk-2010.05/qt/include/QtGui -I../../../qtsdk-2010.05/qt/include -I. -I. -o widgets.o widgets.cpp
g++ -m64 -Wl,-O1 -Wl,-rpath,/home/anisha/qtsdk-2010.05/qt/lib -o qt widgets.o    -L/home/anisha/qtsdk-2010.05/qt/lib -lQtGui -L/home/anisha/qtsdk-2010.05/qt/lib -L/usr/X11R6/lib64 -lQtCore -lpthread 

anisha@linux-dopx:~/Desktop/notes/qt> ./qt 2 f g
anisha@linux-dopx:~/Desktop/notes/qt> 

没有特别发生,我也不知道自己在做什么或应该做什么。

编辑1:我尝试./qt -style=windows的代码。

#include <QtGui>

 int main (int argc, char *argv[])
 {
    QApplication app (argc, argv);

    QWidget objQWidget;
    objQWidget.show                 ();     
    objQWidget.resize               (320, 240);     
    objQWidget.setWindowTitle ("Text to be shown on the title bar\n");

    // Adding a "child" widget.
    QPushButton *objQPushButton = new QPushButton ("Text to be shown on the button", &objQWidget);
    objQPushButton->move         (100, 100);
    objQPushButton->show         ();

    return app.exec                   ();
 }

【问题讨论】:

    标签: qt qt4


    【解决方案1】:

    构造函数中传递的参数稍后可以通过静态方法访问
    QStringList QCoreApplication::arguments()。这样,命令行参数可以在代码中的任何地方处理。

    【讨论】:

      【解决方案2】:

      继续阅读该文档。此处列出了QApplication 作用的标志集。

      试一试:

      ./qt -style=windows
      

      QApplication 不处理的论点被搁置一旁。它处理的那些被删除(这就是该函数接受非常量参数的原因)。

      【讨论】:

      • 哦,是的,谢谢,我现在确实进一步阅读了它,看到了很多标志,也尝试了你的示例,但它对输出没有做任何特别的事情。无论如何,这是另一个问题。
      • 我现在必须指出一点,在此处提问之前至少阅读整页。
      • 如果您不显示 GUI,它将不会做任何事情...而且由于您没有发布上面使用的代码,我不知道您是否通过 main的参数到QApplication 的构造函数。
      • 不妨试试其他款式。你的代码很好(除了像这样对齐参数真的很少见,而且对我来说真的很分散注意力)。在初始化 QApplication 之前和之后打印出argc,以查看该构造函数正在“吃掉”一些参数。
      【解决方案3】:

      关于使用 QCoreApplication 的建议只推荐你有一个控制台应用程序。如果您使用的是 QApplication,并且想要从 QWidget 内部访问命令行参数,您可以使用全局指针 qApp 来实现:

      Here 您可以从诺基亚找到文档,或从 qt-project.org 找到 here。在 Qt Creator 的文档浏览器中我找不到它,所以它充其量不是那么容易访问。

      所以你可以找到:

      int my_argc = qApp->arguments().count();

      QString my_argv_0 = qApp->arguments.at(0);

      ...

      等等。

      我知道这个问题很老,但我花了一些时间从我的主窗口中找到一种方法,所以希望这对其他人有帮助。

      【讨论】:

        【解决方案4】:

        谢谢,异见企鹅!这对我帮助很大! 请注意:

        QString my_argv_0 = qApp->arguments.at(0);
        

        应替换为:

        QString my_argv_0 = qApp->arguments().at(0);
        

        (注意'arguments'后面的附加())

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-03
          • 1970-01-01
          • 2016-05-06
          • 1970-01-01
          • 2011-04-13
          相关资源
          最近更新 更多