将 Qt Widgets 和 QML 与 QWidget::createWindowContainer() 结合起来
Posted
技术标签:
【中文标题】将 Qt Widgets 和 QML 与 QWidget::createWindowContainer() 结合起来【英文标题】:Combining Qt Widgets and QML with QWidget::createWindowContainer() 【发布时间】:2013-10-16 21:07:36 【问题描述】:我已尝试关注这篇文章:
http://www.ics.com/blog/combining-qt-widgets-and-qml-qwidgetcreatewindowcontainer#.UlVUExCXcnI
如果我尝试重做此操作,我会收到此错误:
15:13:36:项目 Test_QMLWidgets01 的运行步骤... 15:13:36:配置不变,跳过 qmake 步骤。 15:13:36:开始:“C:\Qt\Qt5\Tools\QtCreator\bin\jom.exe” C:\Qt\Qt5\Tools\QtCreator\bin\jom.exe -f Makefile.Debug CL -c -nologo -Zm200 -Zc:wchar_t的-zi -MDd -GR -W3 -w34100 -w34189 -EHsc -DUNICODE -DWIN32 -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_OPENGL_ES_2 -DQT_OPENGL_ES_2_ANGLE -I“C:\ Qt的\Qt5\5.1.0\msvc2010\include" -I"C:\Qt\Qt5\5.1.0\msvc2010\include\QtWidgets" -I"C:\Qt\Qt5\5.1.0\msvc2010\include\QtGui "-I"C:\Qt\Qt5\5.1.0\msvc2010\include\QtANGLE"-I"C:\Qt\Qt5\5.1.0\msvc2010\include\QtCore"-I"调试"-I"。 " -一世”。” -I"C:\Qt\Qt5\5.1.0\msvc2010\mkspecs\win32-msvc2010" -Fodebug\@C:\Users\VANBEB~1\AppData\Local\Temp\mainwindow.obj.3328.0.jom 主窗口.cpp ..\Test_QMLWidgets01\mainwindow.cpp(2):致命错误 C1083:无法打开包含文件:'QQuickView':没有这样的文件或目录 jom: E:\QtProjects\build-Test_QMLWidgets01-Desktop_Qt_5_1_0_MSVC2010_32bit-Debug\Makefile.Debug [debug\mainwindow.obj] 错误 2 jom: E:\QtProjects\build-Test_QMLWidgets01-Desktop_Qt_5_1_0_MSVC2010_32bit-Debug\Makefile [调试] 错误 2 15:13:36:进程“C:\Qt\Qt5\Tools\QtCreator\bin\jom.exe”以代码 2 退出。 构建/部署项目 Test_QMLWidgets01 时出错(套件:Desktop Qt 5.1.0 MSVC2010 32bit) 执行步骤“制作”时 15:13:36:经过时间:00:00。
所以我将#include 更改为#include,但随后出现链接错误:
15:16:27:项目 Test_QMLWidgets01 的运行步骤... 15:16:27:配置不变,跳过 qmake 步骤。 15:16:27:开始:“C:\Qt\Qt5\Tools\QtCreator\bin\jom.exe” C:\Qt\Qt5\Tools\QtCreator\bin\jom.exe -f Makefile.Debug CL -c -nologo -Zm200 -Zc:wchar_t的-zi -MDd -GR -W3 -w34100 -w34189 -EHsc -DUNICODE -DWIN32 -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_OPENGL_ES_2 -DQT_OPENGL_ES_2_ANGLE -I“C:\ Qt的\Qt5\5.1.0\msvc2010\include" -I"C:\Qt\Qt5\5.1.0\msvc2010\include\QtWidgets" -I"C:\Qt\Qt5\5.1.0\msvc2010\include\QtGui "-I"C:\Qt\Qt5\5.1.0\msvc2010\include\QtANGLE"-I"C:\Qt\Qt5\5.1.0\msvc2010\include\QtCore"-I"调试"-I"。 " -一世”。” -I"C:\Qt\Qt5\5.1.0\msvc2010\mkspecs\win32-msvc2010" -Fodebug\@C:\Users\VANBEB~1\AppData\Local\Temp\mainwindow.obj.4220.15.jom 主窗口.cpp echo 1 /* CREATEPROCESS_MANIFEST_RESOURCE_ID / 24 / RT_MANIFEST */ "debug\Test_QMLWidgets01.exe.embed.manifest">debug\Test_QMLWidgets01.exe_manifest.rc 如果不存在 debug\Test_QMLWidgets01.exe 如果存在 debug\Test_QMLWidgets01.exe.embed.manifest del debug\Test_QMLWidgets01.exe.embed.manifest 如果存在 debug\Test_QMLWidgets01.exe.embed.manifest 复制 /Y debug\Test_QMLWidgets01.exe.embed.manifest debug\Test_QMLWidgets01.exe_manifest.bak 链接 /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='' processorArchitecture=''" /MANIFEST /MANIFESTFILE:debug\Test_QMLWidgets01.exe.embed.manifest /OUT:debug\Test_QMLWidgets01.exe @C:\Users\VANBEB~1\AppData\Local\Temp\Test_QMLWidgets01 .exe.4220.2886.jom mainwindow.obj:错误 LNK2019:未解析的外部符号“__declspec(dllimport) public: void _thiscall QQuickView::setSource(class QUrl const &)”(_imp_?setSource@QQuickView@@QAEXABVQUrl@@@ Z) 在函数“public: __thiscall MainWindow::MainWindow(class QWidget *)”中引用 (??0MainWindow@@QAE@PAVQWidget@@@Z) mainwindow.obj : 错误 LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall QQuickView::QQuickView(class QWindow *)" (_imp??0QQuickView@@QAE@PAVQWindow@@@Z ) 在函数 "public: __thiscall MainWindow::MainWindow(class QWidget *)" (??0MainWindow@@QAE@PAVQWidget@@@Z) 中引用 mainwindow.obj : 错误 LNK2001: 无法解析的外部符号“public: virtual struct QMetaObject const * __thiscall QQuickView::metaObject(void)const” (?metaObject@QQuickView@@UBEPBUQMetaObject@@XZ) mainwindow.obj:错误 LNK2001:未解析的外部符号“public:virtual void * __thiscall QQuickView::qt_metacast(char const *)”(?qt_metacast@QQuickView@@UAEPAXPBD@Z) mainwindow.obj : 错误 LNK2001: 无法解析的外部符号 "public: virtual int __thiscall QQuickView::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@QQuickView@@UAEHW4Call@QMetaObject@@HPAPAX@Z) mainwindow.obj:错误 LNK2001:未解析的外部符号“受保护:虚拟布尔 __thiscall QQuickWindow::event(class QEvent *)”(?event@QQuickWindow@@MAE_NPAVQEvent@@@Z) mainwindow.obj:错误 LNK2001:未解析的外部符号“受保护:虚拟 void __thiscall QQuickView::timerEvent(class QTimerEvent *)”(?timerEvent@QQuickView@@MAEXPAVQTimerEvent@@@Z) mainwindow.obj:错误 LNK2001:未解析的外部符号“公共:虚拟类 QAccessibleInterface * __thiscall QQuickWindow::accessibleRoot(void)const”(?accessibleRoot@QQuickWindow@@UBEPAVQAccessibleInterface@@XZ) mainwindow.obj:错误 LNK2001:未解析的外部符号“公共:虚拟类 QObject * __thiscall QQuickWindow::focusObject(void)const” (?focusObject@QQuickWindow@@UBEPAVQObject@@XZ) mainwindow.obj:错误 LNK2001:未解析的外部符号“受保护:虚拟 void __thiscall QQuickWindow::exposeEvent(class QExposeEvent *)”(?exposeEvent@QQuickWindow@@MAEXPAVQExposeEvent@@@Z) mainwindow.obj:错误 LNK2001:未解析的外部符号“受保护:虚拟 void __thiscall QQuickView::resizeEvent(class QResizeEvent *)”(?resizeEvent@QQuickView@@MAEXPAVQResizeEvent@@@Z) mainwindow.obj:错误 LNK2001:未解析的外部符号“受保护:虚拟 void __thiscall QQuickWindow::focusInEvent(class QFocusEvent *)”(?focusInEvent@QQuickWindow@@MAEXPAVQFocusEvent@@@Z) mainwindow.obj:错误 LNK2001:未解析的外部符号“受保护:虚拟 void __thiscall QQuickWindow::focusOutEvent(class QFocusEvent *)”(?focusOutEvent@QQuickWindow@@MAEXPAVQFocusEvent@@@Z) mainwindow.obj:错误 LNK2001:未解析的外部符号“受保护:虚拟 void __thiscall QQuickWindow::showEvent(class QShowEvent *)”(?showEvent@QQuickWindow@@MAEXPAVQShowEvent@@@Z) mainwindow.obj:错误 LNK2001:未解析的外部符号“受保护:虚拟 void __thiscall QQuickWindow::hideEvent(class QHideEvent *)”(?hideEvent@QQuickWindow@@MAEXPAVQHideEvent@@@Z) mainwindow.obj:错误 LNK2001:未解析的外部符号“受保护:虚拟 void __thiscall QQuickView::keyPressEvent(class QKeyEvent *)”(?keyPressEvent@QQuickView@@MAEXPAVQKeyEvent@@@Z) mainwindow.obj:错误 LNK2001:未解析的外部符号“受保护:虚拟 void __thiscall QQuickView::keyReleaseEvent(class QKeyEvent *)”(?keyReleaseEvent@QQuickView@@MAEXPAVQKeyEvent@@@Z) mainwindow.obj:错误 LNK2001:未解析的外部符号“受保护:虚拟 void __thiscall QQuickView::mousePressEvent(class QMouseEvent *)”(?mousePressEvent@QQuickView@@MAEXPAVQMouseEvent@@@Z) mainwindow.obj:错误 LNK2001:未解析的外部符号“受保护:虚拟 void __thiscall QQuickView::mouseReleaseEvent(class QMouseEvent *)”(?mouseReleaseEvent@QQuickView@@MAEXPAVQMouseEvent@@@Z) mainwindow.obj:错误 LNK2001:未解析的外部符号“受保护:虚拟 void __thiscall QQuickWindow::mouseDoubleClickEvent(class QMouseEvent *)”(?mouseDoubleClickEvent@QQuickWindow@@MAEXPAVQMouseEvent@@@Z) mainwindow.obj:错误 LNK2001:未解析的外部符号“受保护:虚拟 void __thiscall QQuickView::mouseMoveEvent(class QMouseEvent *)”(?mouseMoveEvent@QQuickView@@MAEXPAVQMouseEvent@@@Z) mainwindow.obj:错误 LNK2001:未解析的外部符号“受保护:虚拟 void __thiscall QQuickWindow::wheelEvent(class QWheelEvent *)”(?wheelEvent@QQuickWindow@@MAEXPAVQWheelEvent@@@Z) mainwindow.obj:错误 LNK2019:函数中引用了无法解析的外部符号“__declspec(dllimport) public: virtual _thiscall QQuickView::~QQuickView(void)”(_imp_??1QQuickView@@UAE@XZ) "public: virtual void * _thiscall QQuickView::
scalar deleting destructor'(unsigned int)" (??_GQQuickView@@UAEPAXI@Z) mainwindow.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QQmlDebuggingEnabler::QQmlDebuggingEnabler(bool)" (__imp_??0QQmlDebuggingEnabler@@QAE@_N@Z) referenced in function "void __cdecl
dynamic initializer for 'qmlEnableDebuggingHelper''(void)" (??_EqmlEnableDebuggingHelper@@YAXXZ) debug\Test_QMLWidgets01.exe : 致命错误 LNK1120: 24 unresolved externals jom: E:\QtProjects\build-Test_QMLWidgets01-Desktop_Qt_5_1_0_MSVC2010_32bit-Debug\Makefile.Debug [debug\Test_QMLWidgets01.exe] 错误 1120 jom: E:\QtProjects\build-Test_QMLWidgets01-Desktop_Qt_5_1_0_MSVC2010_32bit-Debug\Makefile [调试] 错误 2 15:16:30:进程“C:\Qt\Qt5\Tools\QtCreator\bin\jom.exe”以代码 2 退出。 构建/部署项目 Test_QMLWidgets01 时出错(套件:Desktop Qt 5.1.0 MSVC2010 32bit) 执行步骤“制作”时 15:16:30:经过时间:00:04。
我做错了什么?
【问题讨论】:
您应该阅读错误消息。似乎您没有将必要的 Qt 模块链接到您的项目。 我要如何链接什么? 为您的 IDE 寻求帮助 ***.com/questions/8978471/… 【参考方案1】:我认为您需要添加到您的 .pro
文件中:
QT += core gui widgets quick
【讨论】:
这似乎是问题所在。谢谢! 我已经安装了 Qt 5,但我的 Qt 似乎仍然有 Qt4.8,我必须手动添加所有文件。有没有办法使这个过程自动化或一次性完成。 @Jino,您可以尝试将另一个 Kit 添加到 QtCreator。 @Kakadu,你能告诉我应该安装哪个套件以及如何安装。如果您有相应的步骤,请与我分享。 @Jino,你可以从qt-project.org/doc/qtcreator-2.6/creator-targets.html开始以上是关于将 Qt Widgets 和 QML 与 QWidget::createWindowContainer() 结合起来的主要内容,如果未能解决你的问题,请参考以下文章
Qt文档阅读笔记-Qt, QML, Widgets…What Is The Difference?
Qt文档阅读笔记-Qt, QML, Widgets…What Is The Difference?
Declarative Widgets is a QML plugin that adds Qt Widgets support to QML