i在qt creator 4.3.1中创建一个项目,而无需使用UI表单。这是代码main.qml:
import QtQuick 2.6
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
MouseArea {
anchors.fill: parent
onClicked: {
console.log(qsTr('Clicked on background. Text: "' + textEdit.text + '"'))
}
}
TextEdit {
id: textEdit
text: qsTr("Enter some text...")
verticalAlignment: Text.AlignVCenter
anchors.top: parent.top
anchors.horizontalCenter: parent.horizontalCenter
anchors.topMargin: 20
Rectangle {
anchors.fill: parent
anchors.margins: -10
color: "transparent"
border.width: 1
}
}
}
程序运行并起作用。现在,我想摆脱窗口并用矩形替换:
import QtQuick 2.6
Rectangle {
id: root
width: 200; height: 200;
color: "#ffffff"
}
但是当程序启动时,什么也不会发生,表单不会打开我在做什么错?
main.cpp代码。在这两种情况下,代码:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
在QT应用程序中,您必须至少具有一个顶级窗口,即放置其他组件的窗口。
创建项目时,您应该获得默认的main.cpp:
main.cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
main.qml
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
}
因此,让我们分析元素并将文档使用:
- qqmlapplicationEngine:
qqmlapplicationEngine提供了一种从单个QML文件加载应用程序的方便方法。
[...]
与qquickview不同,qqmlapplicationEngine不会自动创建一个root窗口。如果您快速使用QT中的视觉物品,则需要将它们放在窗口中。
也就是说,QQmlApplicationEngine
不会创建顶级级别,因此,如果我们希望显示窗口,则必须使用另一个元素,并且根据建议,选项是使用Window{}
在您的第二次测试中,您正在使用项目,例如矩形,这只是一个组件,无法创建顶级级别,因此建议使用qquickview:
QquickView类提供了一个用于显示QT快速用户界面的窗口。
[...]
因此,如果要显示矩形,则应在主体中使用以下内容。cpp:
main.cpp
#include <QGuiApplication>
#include <QQuickView>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQuickView view;
view.setSource(QUrl(QStringLiteral("qrc:/main.qml")));
view.setResizeMode(QQuickView::SizeRootObjectToView);
view.show();
return app.exec();
}
main.qml
import QtQuick 2.6
Rectangle {
id: root
width: 200; height: 200;
color: "#ffffff"
}