--icon选项不适用于Qt> 5.5的QApplication

时间:2019-02-06 12:38:42

标签: c++ linux qt

我想显示该用户为应用程序提供的命令行参数,例如:

./ToolOne --name

当我尝试从Qt 5.3.2中的QApplication对象获取参数时,一切正常。 但是,在使用Qt 5.6.1或5.11.3之后,一切正常,除了选项

--icon

无论-i还是--ico,其他任何单词都有效。除了--icon ...之外,当QApplication()使用此参数时,它就消失了。

我的主要功能:

#include <QApplication>

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

    QStringList arguments = a.arguments(); 
    // If argv has --icon, under Qt >= 5.6, arguments list will NOT contain icon

    MainWindow w( arguments.join(" ") );
    w.show();

    return a.exec();
}

--icon参数仅在QApplication构造函数中消失。值得一提的是,当我使用QCoreApplication时,它可以在所有系统上完美运行。

我试图在Qt中找到任何特殊处理或任何错误报告,但没有结果。 如果那很重要,我已经检查了它:

  • 具有Qt 5.3.2 和gcc的CentOS 6:4.8.2(有效
  • 具有Qt 5.3.2 和gcc的RedHat 6:4.7.2(有效
  • 具有Qt 5.6.1和gcc 4.7.1的RedHat 6(失败)
  • 具有Qt 5.6.1和gcc 4.9.1的RedHat 6(失败)
  • 具有Qt 5.9.2和gcc 4.8.5的CentOS 7(失败)
  • 具有Qt 5.3.2 和gcc 4.8.5的RedHat 7(有效
  • 具有Qt 5.11.3和gcc 8.2.1的Fedora 29(失败)

链接带有一个小例子: https://drive.google.com/drive/folders/1TGJIbzTkotnHbymTC3xDa-0PFAfG1w4n?usp=sharing

1 个答案:

答案 0 :(得分:5)

this code from Qt 5.5似乎-icon-qwindowicon的同义词:

    } else if (arg == "-qwindowicon" || (isXcb && arg == "-icon")) {
        if (++i < argc) {
            icon = QString::fromLocal8Bit(argv[i]);
        }
    }

这就是使用Xcb时将其删除的原因。我有种预感(没有时间去验证),对于使用Xcb的应用程序来说,它多少有些标准命令行参数,这就是为什么Qt在使用Xcb时会对其进行解析的原因。

整个图标命令行选项似乎已在5.4中添加,以挖掘版本历史记录。 Qt 5.3 version of that source file无法处理。