qml and c++ with qt quick 2 application
You can definitely use ApplicationWindow
, but you need to use QQmlApplicationEngine
, and you need to explicitly show your toplevel window. You can see a complete example in another answer. Below is just a main.cpp
file that should work for you.
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQuickWindow>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl("qml/convQML/main.qml"));
QObject *topLevel = engine.rootObjects().value(0);
QQuickWindow *window = qobject_cast<QQuickWindow *>(topLevel);
window->show();
return app.exec();
}
![khajvah](https://i.stack.imgur.com/gb5O6.jpg?s=256&g=1)
khajvah
A bored web developer. Currently interested in: OS development Mathematics (though I don't have much knowledge in this subject) (maybe) Statistics What I hate: Corruption Email: [email protected]
Updated on June 20, 2022Comments
-
khajvah about 2 years
I have a qml GUI of my main window. I just created a qt quick2 application and copied and pasted qml GUI of my main window to main.qml. When I run the application, it displays blank window and following is my qml log:
QML debugging is enabled. Only use this in a safe environment. Both point size and pixel size set. Using pixel size. Both point size and pixel size set. Using pixel size. Both point size and pixel size set. Using pixel size. file:///home/khajvah/build-convQML-Desktop_Qt_5_1_0_GCC_64bit-Debug/qml/convQML/main.qml:99:9: QML Text: Cannot anchor to an item that isn't a parent or sibling. file:///home/khajvah/build-convQML-Desktop_Qt_5_1_0_GCC_64bit-Debug/qml/convQML/main.qml:31:9: QML BasicButton: Cannot anchor to an item that isn't a parent or sibling. file:///home/khajvah/Qt5.1.0/5.1.0/gcc_64/qml/QtQuick/Controls/Styles/Base/ToolButtonStyle.qml:73:9: QML Image: Cannot open: file:///home/khajvah/build-convQML-Desktop_Qt_5_1_0_GCC_64bit-Debug/logout-512.png file:///home/khajvah/Qt5.1.0/5.1.0/gcc_64/qml/QtQuick/Controls/Styles/Base/ToolButtonStyle.qml:73:9: QML Image: Cannot open: file:///home/khajvah/build-convQML-Desktop_Qt_5_1_0_GCC_64bit-Debug/console.ico file:///home/khajvah/Qt5.1.0/5.1.0/gcc_64/qml/QtQuick/Controls/Styles/Base/ToolButtonStyle.qml:73:9: QML Image: Cannot open: file:///home/khajvah/build-convQML-Desktop_Qt_5_1_0_GCC_64bit-Debug/mod.png QQuickView only supports loading of root objects that derive from QQuickItem. If your example is using QML 2, (such as qmlscene) and the .qml file you loaded has 'import QtQuick 1.0' or 'import Qt 4.7', this error will occur. To load files with 'import QtQuick 1.0' or 'import Qt 4.7', use the QDeclarativeView class in the Qt Quick 1 module.
the following is my qml file:
import QtQuick 2.1 import QtQuick.Controls 1.0 import QtQuick.Window 2.0 ApplicationWindow { id: applicationwindow1 title: qsTr("Converter") width: 500 //height: 600 // menuBar: MenuBar { // } ToolBar { id: tool_bars x: 0 y: 0 width: applicationwindow1.width height: 39 clip: true smooth: false opacity: 1 transformOrigin: Item.Center ToolButton { id: modify y: 1 scale: 1 anchors.right: tool_bars.left iconSource: "../../mod.png" } ToolButton { id: consolebtn x: 32 y: 1 scale: 1 anchors.left: modify.right anchors.leftMargin: 6 iconSource: "../../console.ico" } ToolButton { id: exit; x: 75 y: 1 scale: 1 anchors.left: consolebtn.right; anchors.leftMargin: 6 iconSource: "../../logout-512.png" } } GroupBox { id: group_box1 x: 0 y: 30 width: 500 height: 136 anchors.top: tool_bars.bottom anchors.topMargin: -9 anchors.left: parent.left anchors.leftMargin: 0 anchors.right: parent.right anchors.rightMargin: 0 ComboBox { id: typebox anchors.left: text1.right anchors.leftMargin: 5 width: 70 height: 23 anchors.top: parent.top anchors.topMargin: 37 } Text { id: text1 anchors.left: group_box1.left anchors.leftMargin: 5 text: "Type:" anchors.top: parent.top anchors.topMargin: 41 font.italic: true style: Text.Normal font.pointSize: 12 font.pixelSize: 12 } ComboBox { id: frombox x: 205 anchors.left: text2.right anchors.leftMargin: 8 width: 70 height: 23 anchors.top: parent.top anchors.topMargin: 37 } Text { id: text2 x: 189 anchors.leftMargin: 20 text: "From:" anchors.top: parent.top anchors.topMargin: 41 anchors.horizontalCenterOffset: -32 anchors.horizontalCenter: parent.horizontalCenter font.italic: true style: Text.Normal font.pointSize: 12 font.pixelSize: 12 } ComboBox { id: tobox x: 412 anchors.right: parent.right anchors.rightMargin: 5 width: 70 height: 23 anchors.top: parent.top anchors.topMargin: 37 } Text { id: text3 x: 0 text: "To:" anchors.top: parent.top anchors.topMargin: 41 anchors.right: tobox.left anchors.rightMargin: 5 font.italic: true style: Text.Normal font.pointSize: 12 font.pixelSize: 12 } TextField { id: text_field1 y: 78 width: 197 height: 22 anchors.bottom: parent.bottom anchors.bottomMargin: 15 anchors.left: parent.left anchors.leftMargin: 5 placeholderText: "Input" } TextField { id: text_field2 x: 293 y: 78 width: 186 height: 22 anchors.bottom: parent.bottom anchors.bottomMargin: 15 anchors.right: parent.right anchors.rightMargin: 5 readOnly: true placeholderText: "Result" } } TextArea { id: text_area1 x: 0 y: 178 width: 500 height: 80 anchors.left: parent.left anchors.leftMargin: 0 anchors.right: parent.right anchors.rightMargin: 0 anchors.top: group_box1.bottom anchors.topMargin: 12 anchors.bottom: addlogbtn.top anchors.bottomMargin: 5 } Button { id: addlogbtn x: 7 y: 212 width: 110 height: 23 text: "Add to Log" anchors.bottom: parent.bottom anchors.bottomMargin: 5 anchors.left: parent.left anchors.leftMargin: 7 } Button { id: button1 x: 195 y: 212 width: 118 height: 23 text: "Export" anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom anchors.bottomMargin: 5 } Button { id: button2 x: 359 y: 212 width: 117 height: 23 text: "Clear" anchors.right: parent.right anchors.rightMargin: 7 anchors.bottom: parent.bottom anchors.bottomMargin: 5 } }
and automatically generated main.cpp:
#include <QtGui/QGuiApplication> #include "qtquick2applicationviewer.h" int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QtQuick2ApplicationViewer viewer; viewer.setMainQmlFile(QStringLiteral("qml/convQML/main.qml")); viewer.showExpanded(); return app.exec(); }
Any ideas why this does not work? I am new to qml and I am really confused how it is connected to c++.