我有一个qt快速ui表单
,其中包含两个文件:LogPanel.qml
LogPanelForm.ui.qml
LogPanelForm.ui.qml
文件:
import QtQuick 2.4
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.3
Item {
id: item1
width: 800
height: 600
property alias btnAdd: btnAdd
Button {
id: btnAdd
text: "add"
}
}
LogPanel.qml
文件:
import QtQuick 2.4
import QtQuick.Dialogs 1.2
import QtQuick.Window 2.3
LogPanelForm {
btnAdd.onClicked: {
console.log("1")
}
}
我想从 C++ 代码加载这个快速 ui 表单
:
如果我设置源LogPanel.qml
:
QQuickWidget *view = new QQuickWidget();
view->setSource(QUrl::fromLocalFile(":/qml/LogPanel.qml"));
view->show();
表单控件将不会显示。并且出现错误消息:
file::/qml/LogPanel.qml:5:1: LogPanelForm is not a type
LogPanelForm {
^
如果我设置源LogPanelForm.ui.qml
:
QQuickWidget *view = new QQuickWidget();
view->setSource(QUrl::fromLocalFile(":/qml/LogPanelForm.ui.qml"));
view->show();
LogPanel.qml
中的onClick事件将不会被调用。
我应该如何从 C++ 代码加载表单,以便控件和事件处理都可以工作?
最佳答案
您正在使用 QUrl::fromLocalFile
而不是 QUrl
的隐式版本。问题出在实际的网址上。正如您已经研究过的那样,它应该以 qrc:/
开头。
此外,还有一个用于管理资源的有用 API:QDir::setSearchPaths
(或QDir::addSearchPath
)。它可能有助于管理您的路径。例如,您可以从调试中的真实文件夹加载资源,以及从发布中的资源加载资源,但保留代码中的所有字符串引用而不进行更改(例如 myQml:/something
)。
关于c++ - 如何从 QtQuickWidget 加载 qt Quick ui 表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48439121/