【问题标题】:Program crash after setting QApplication::style twice设置 QApplication::style 两次后程序崩溃
【发布时间】:2013-12-12 18:01:11
【问题描述】:
#include <QApplication>
int main() {
   QApplication::setStyle("windows");
   QApplication::setStyle("windows");
}

这个程序产生Segmentation fault (core dumped)。我的qmake 版本是4.7.2。这是 Qt 错误还是我的版本太旧?

【问题讨论】:

    标签: c++ qt crash segmentation-fault qmake


    【解决方案1】:

    您必须先创建一个 QApplication 实例,然后才能设置它的样式。来自文档

    样式对象的所有权转移给QApplication,所以 QApplication 将在应用程序退出或何时删除样式对象 设置了新样式,旧样式仍然是 应用程序对象。

    我假设它崩溃了,因为没有 QApplication 来获取样式的所有权。一般来说,创建 QApplication 是您应该做的第一件事。

    #include <QApplication>
    int main() {
       QApplication a(argc, argv);
       QApplication::setStyle("windows");
       QApplication::setStyle("windows");
    }
    

    【讨论】:

    • 你能解释一下,如果函数需要一个对象,为什么它是静态的?
    • 我不知道 Qt 的历史,但我认为它们是静态的,因此您可以从任何地方访问 QApplication。 QApplication 有一个由构造函数设置的静态自变量,以便静态函数可以访问应用程序实例。在构造函数之前调用的任何静态函数都会获得一个 NULL 指针。不是最好的设计,但我确信当时是有原因的。如果你必须调用 QApplication::instance()->setStyle() 或类似的东西会更清楚。
    猜你喜欢
    • 1970-01-01
    • 2020-05-10
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多