【问题标题】:QWebView - QWidget: must construct a QApplication before a QPaintDevice errorQWebView - QWidget:必须在 QPaintDevice 错误之前构造一个 QApplication
【发布时间】:2016-06-26 21:05:12
【问题描述】:

每当我尝试创建一个新的 QWebView 时,构建后错误是

QWidget: Must construct a QApplication before a QPaintDevice

为什么会这样?

是的,我确实在 pro 文件中添加了QT += webkit,它在此处显示

在 qwtconfig.pri 中

CONFIG += QwtDll 这行必须是->

#CONFIG += QwtDll

qtwconfig.pri 在哪里?

FWI 我正在静态构建中

这里是main()

#include "MyWidget.h"
#include <QPlastiqueStyle>
#include <QtPlugin>
#include <QtWebKit/QWebView>
Q_IMPORT_PLUGIN(qico)


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

QApplication app(argc, argv);

app.setStyle(new QPlastiqueStyle);
app.setFont(QFont("Calibri"));
MyWidget widget;
widget.show();

QWebView w;
    w.show();

return app.exec();

}

【问题讨论】:

    标签: qt qwidget qwebview


    【解决方案1】:

    文档中提到 Webkit 可能无法用作静态库。

    来自Platform and Compiler Notes 页面:

    WebKit 仅支持作为动态构建的库。不支持静态链接。

    尝试使用动态链接。

    【讨论】:

    • 如何强制 webkit 动态链接?
    【解决方案2】:

    您需要实例化一个QApplication 对象才能使用任何基于小部件的类,并且必须先创建它,因此您的main() 应该看起来像这样......

    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QWebView w;
        w.show();    
        return a.exec();
    }
    

    【讨论】:

    • 那么您的可执行文件会以某种方式在 QApplication 对象之前创建一个基于 QWidget 的对象。也许尝试一个干净的构建并确保您正在运行您认为正在运行的可执行文件。如果您选择的源代码很少,可以重现问题,请将其发布在问题中。
    【解决方案3】:

    假设您正在创建 QApplication,请确保您没有静态分配对象。

    不要这样做

    QWebView w;
    int main(int argc, char *argv[])
    {
      QApplication a(argc, argv);
      w.show();
      return a.exec();
    }
    

    【讨论】:

      【解决方案4】:

      此错误的另一个来源可能是链接到错误版本的 Qt 库 - 用于调试构建的发布版本,反之亦然。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-10
        • 2013-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-02
        • 2023-03-12
        相关资源
        最近更新 更多