问题
问题是,我有一些C++代码加载了一个名为gui.qml
的QML文件,它编译时没有问题,但运行时它不会显示QML应用程序窗口,也不会给予任何错误。
代码
下面是我用来加载qml的C++代码(编辑:使用qrc加载qml):
#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[]) {
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
const QUrl url("qrc:/components/gui.qml");
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app,
[url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
},
Qt::QueuedConnection);
engine.load(url);
return app.exec();
}
下面是我想要显示的QML代码:
import QtQuick 6.4
import QtQuick.Controls 6.4
import QtQuick.Controls.Material 6.0
import QtQuick.Layouts 6.0
import "components"
ApplicationWindow {
visible: true
width: 856
height: 482
title: "ModVault"
Material.theme: Material.Dark
QtObject{
id: funtions
function switch_screen(screen_index) {
stack_layout.currentIndex = screen_index
}
function toggle_menu() {
menu_animation.running = true
if (menu.width === 50) {
menu_button.icon_source = "qrc:/menu_icons/menu_icons/menu_2.png"
} else {
menu_button.icon_source = "qrc:/menu_icons/menu_icons/menu.png"
}
}
}
Rectangle {
id: main
color: "#3d3d3d"
anchors.fill: parent
Rectangle {
id: menu
width: 50
opacity: 0.478
color: "#3d3d3d"
anchors.left: parent.left
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.leftMargin: 0
anchors.bottomMargin: 0
anchors.topMargin: 0
clip: true
PropertyAnimation {
id: menu_animation
target: menu
property: "width"
to: if (menu.width === 50)
return 300
else
return 50
duration: 500
easing.type: Easing.InOutQuint
}
MenuButton {
id: menu_button
onClicked: funtions.toggle_menu()
}
}
}
}
下面是我用来构建应用程序的qmake文件:
######################################################################
# Automatically generated by qmake (3.1) Wed May 3 17:38:34 2023
######################################################################
TEMPLATE = app
TARGET = ModVault
INCLUDEPATH += .
# You can make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# Please consult the documentation of the deprecated API in order to know
# how to port your code away from it.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_UP_TO=0x060000 # disables all APIs deprecated in Qt 6.0.0 and earlier
# Input
SOURCES += src/main.cpp
QT += quick
DESTDIR = ./build
RESOURCES += src/resources.qrc
qrc代码:
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource prefix="/components">
<file>gui.qml</file>
<file>components/MenuButton.qml</file>
</qresource>
<qresource prefix="/menu_icons">
<file>menu_icons/menu.png</file>
<file>menu_icons/menu_2.png</file>
<file>menu_icons/home.png</file>
<file>menu_icons/download.png</file>
<file>menu_icons/github.png</file>
<file>menu_icons/repository.png</file>
<file>menu_icons/update.png</file>
<file>menu_icons/close.png</file>
<file>menu_icons/minimize.png</file>
<file>menu_icons/settings.png</file>
</qresource>
</RCC>
What I Have Tried
我尝试过的事情包括:
1.使用QQuickView代替,但它没有改变任何东西
1.添加了visible: true
,但没有更改
1.使用qrc加载qml
其他信息:我正在使用make和qmake来构建应用程序。
我应该怎么做才能解决这个问题?
1条答案
按热度按时间uemypmqf1#
我终于找到了答案,这完全是我的错。感谢所有试图帮助我们的人,很抱歉浪费了你的时间。
答案:当我第一次运行这个应用程序时,我得到了这个错误:
我在谷歌上搜索了一下,Github问题的第一个答案是设置这个环境变量:
现在我意识到这也会阻止应用程序实际显示。因此,为了解决这个问题,我删除了环境变量,并得到了与以前相同的错误消息,所以我只是通过这样做安装了
libxcb-cursor
:原来如此。
再次感谢所有试图帮助的人。抱歉浪费了你的时间