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

Jos*_*nar 6 c++ linux qt

我想显示用户为应用程序提供的命令行参数fe:

./ToolOne --name
Run Code Online (Sandbox Code Playgroud)

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

--icon
Run Code Online (Sandbox Code Playgroud)

任何其他字工,无论-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();
}
Run Code Online (Sandbox Code Playgroud)

--icon参数只是在QApplication构造函数中消失了.值得一提的是,当我使用QCoreApplication时,它在所有系统下都能完美运行.

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

  • CentOS 6与Qt 5.3.2和gcc:4.8.2(工程)
  • RedHat 6,Qt 5.3.2和gcc:4.7.2(工程)
  • RedHat 6,Qt 5.6.1和gcc 4.7.1(失败)
  • RedHat 6,Qt 5.6.1和gcc 4.9.1(失败)
  • CentOS 7与Qt 5.9.2和gcc 4.8.5(失败)
  • RedHat 7与Qt 5.3.2和gcc 4.8.5(工程)
  • Fedora 29与Qt 5.11.3和gcc 8.2.1(失败)

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

hyd*_*yde 5

看起来-icon是同义词-qwindowicon,通过从Qt的5.5这段代码:

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

这就是使用Xcb时它被删除的原因.我有预感(没时间验证),对于使用Xcb的应用程序来说它是一些或多或少的标准命令行arg,这就是为什么在使用Xcb时它被Qt解析的原因.

这个整个图标命令行选项似乎已添加到5.4中,深入了解版本历史记录.该源文件的Qt 5.3版本无法处理它.