【问题标题】:QT QML is not displaying properlyQT QML 无法正确显示
【发布时间】:2019-01-08 22:41:23
【问题描述】:

我对使用 QT 还很陌生,并且在显示我在 .qml 文件中创建的应用程序窗口时遇到了问题。我使用来自 QT youtube 频道的教程作为起点。当我运行应用程序时,屏幕上确实出现了一个窗口,但是,它不是指定的尺寸,也没有反映 qml 中写入的内容(基于教程的结果)。我正在使用带有 QT 插件的 VS2017,并且有按钮和窗口可以使用 .ui 文件显示。我在这里的实现有什么问题?

qml:

import QtQuick 2.9
import QtQuick.Controls 2.3
import QtPositioning 5.12
import QtLocation 5.12
import QtQuick.Layouts 1.3
import QtQuick.Window 2.2

ApplicationWindow
{
    id: root
    width : 700
    height : 700
    visible : true
    title: qsTr("Hello World")

Action
{
    id: actionNew
    text: qsTr("&New")
    shortcut: StandardKey.New
    icon.name: "document-new"
    onTriggered: area.placeholderText = "To do = New"
}

Action
{
    id: actionOpen
    text: qsTr("&Open")
    shortcut: StandardKey.Open
    icon.name: "document-Open"
    onTriggered: area.placeholderText = "To do - Open"
}

    Action
{
    id: actionSave
    text: qsTr("&Save")
    shortcut: StandardKey.Save
    icon.name: "document-Save"
    onTriggered: area.placeholderText = "To do - Save"
}

menuBar: MenuBar
{
    Menu 
    {
        title: "File"
        MenuItem {action: actionNew}
        MenuItem {action: actionOpen}
        MenuItem {action: actionSave}
    }
}

header: ToolBar
{
    RowLayout
    {
        ToolButton {action: actionNew}
        ToolButton {action: actionOpen}
        ToolButton {action: actionSave}
    }
}

TextArea
{
    id: area
    anchors.fill: parent
}
}

main.cpp:

#include <QtQuick/QQuickView>
#include <QtQuick/QQuickItem>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QQuickView views;
    views.setSource(QUrl(QStringLiteral("qrc:/QTKM/main.qml")));
    views.show();


    return a.exec();
}

【问题讨论】:

  • 有错误信息吗?对我来说,它显示了文件菜单、三个按钮和我可以在其中输入的TextArea...(我唯一要做的就是将 5.12 更改为 5.11,因为这是我正在使用的版本)
  • 完全没有错误消息,一切正常,只是没有发生太多事情。

标签: c++ qt visual-studio-2017 qml


【解决方案1】:

测试您的代码我发现出现了第二个空白窗口。

为了解决这个问题,我将主要内容更改为:

#include <QApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec();
}

使用QQmlApplicationEngine 代替QQuickView

【讨论】:

  • 我试过了,程序刚刚关闭,输出日志状态; “qrc:/QTKM/main.qml:25 ID 不能以大写字母开头”。我知道这是因为 rootObject 是空的,这可能是为什么?
  • @MrPurple 您与我们共享的 qml 文件的第 25 行仅包含一个右大括号,并且所有 id 看起来都很好。您是否检查过正在加载的文件名是否正确(在 C++ 中)?
  • @TrebuchetMS 当我能够显示带有文本字段的窗口时,它与之前工作的 ID 相同。除非我把事情搞砸了。
  • 您是否更改了代码?正如@TrebuchetMS 所说,使用与您发布的代码相同的代码应该没问题。
  • 根本没有改变它:/我做了一个新项目并将代码放入其中,它在那个项目中运行良好。
猜你喜欢
  • 1970-01-01
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 2014-04-23
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多