我想显示用户为应用程序提供的命令行参数,例如:
./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(失败)
- CentOS 7 与 Qt 5.9.2 和 gcc 4.8.5(失败)
- 带有 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
最佳答案
看起来 -icon
是 -qwindowicon
的同义词,作者 this code from Qt 5.5 :
} else if (arg == "-qwindowicon" || (isXcb && arg == "-icon")) {
if (++i < argc) {
icon = QString::fromLocal8Bit(argv[i]);
}
}
这就是为什么在使用 Xcb 时它被删除的原因。我有一种预感(没时间验证),它或多或少是使用 Xcb 的应用程序的一些标准命令行参数,这就是为什么它在使用 Xcb 时被 Qt 解析。
整个图标命令行选项似乎是在 5.4 中添加的,在版本历史中挖掘。 Qt 5.3 version of that source file不处理它。
关于c++ - --icon 选项不适用于 Qt > 5.5 中的 QApplication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54553876/