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

标签 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(失败)
  • 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/

相关文章:

c++ - 如何在不违反 C++ 核心准则的情况下将整数转换为 void*?

c++ - 如何将屏幕图像放入内存缓冲区?

linux - 将 stderr 重定向到记录器,然后重定向到文件

linux - xlsx 与 7z 的压缩方法

linux - chroot "no such file or directory"打印错误的丢失文件

c++ - 通过名称或别名引用 Qt tableWidget 列

c++ - 更改图像的大小以适应 GUI 窗口的新大小

c++ - 在 C++ 库接口(interface)中安全使用容器

c++ - 如何从小部件获取 ui 以便将其连接到另一个类?

C++ 通用树按两个标准进行比较