尝试在Qt中获取自定义窗口框架时出现LNK2019问题

时间:2015-01-08 08:57:40

标签: c++ qt qml lnk2019

我想在Qt 5.4中使用QML创建的应用程序的自定义窗口框架。在我的主项目上实现它之前,我在默认应用程序上尝试了以下内容:

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

    //QQmlApplicationEngine engine;
    //engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    QDeclarativeView view;
    viewsetWindowFlags(Qt::FramelessWindowHint
           | Qt::WindowSystemMenuHint
           | Qt::WindowMinimizeButtonHint
           | Qt::Window);
    view.setAttribute(Qt::WA_TranslucentBackground);
    view.setMaximumHeight(640);
    view.setMaximumWidth(350);
    view.viewport()->setAutoFillBackground(false);
    view.show();

    return app.exec();
}

以下是.pro文件:

TEMPLATE = app

QT += qml quick widgets
QT += core gui widgets quick
QT += network

SOURCES += main.cpp

RESOURCES += qml.qrc

# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =

# Default rules for deployment.
include(deployment.pri)

错误:

main.obj:-1: error: LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl QDeclarativeDebuggingEnabler::QDeclarativeDebuggingEnabler(void)" (__imp_??0QDeclarativeDebuggingEnabler@@QEAA@XZ) referenced in function "void __cdecl `dynamic initializer for 'qmlEnableDebuggingHelper''(void)" (??__EqmlEnableDebuggingHelper@@YAXXZ)

main.obj:-1: error: LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl QDeclarativeView::QDeclarativeView(class QWidget *)" (__imp_??0QDeclarativeView@@QEAA@PEAVQWidget@@@Z) referenced in function main

main.obj:-1: error: LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __cdecl QDeclarativeView::~QDeclarativeView(void)" (__imp_??1QDeclarativeView@@UEAA@XZ) referenced in function main

我知道这与我的.pro文件有关,但在理解LNk错误方面不太好,我尝试了不同的事情但没有进展,直到现在。如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

添加到专业档案:

QT += declarative

From the doc:

  

为了移植旧应用程序,QtDeclarative   模块仍在Qt 5中可用,但已重命名为Qt Quick 1。   需要Qt Quick 1特定API的应用程序(例如   QDeclarativeView或QDeclarativeItem和图形视图   集成)可以使用这个模块。请注意,新应用程序应该   请改用新的Qt QML和Qt Quick模块。

     

要使用Qt Quick 1模块,请添加"声明"到你的qmake .pro   文件:

     

可以按如下方式包含必需的头文件:

#include <QtDeclarative/QDeclarativeView>
#include <QtDeclarative/QDeclarativeItem>

此外:

  

以前在QtDeclarative模块中的所有类都是   进入Qt QML和Qt Quick模块,他们的类名有   已更改以反映其新模块位置。班级名称   变化如下:

     

... QDeclarativeView - &gt; QQuickView

可是:

  

(QtDeclarative模块仍然可供开发人员用作Qt   快速1模块,如下所述。但是,它不应该用于   新的申请。)