标签: qqmlapplicationengine

QQmlApplicationEngine和QQuickView有什么区别?

我使用QQmlApplicationEngine如下:

QGuiApplication app(argc, argv);

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

app.exec();
Run Code Online (Sandbox Code Playgroud)

但现在我想为我的应用程序启用多重采样,并且QQmlApplicationEngine似乎没有setFormat启用多重采样的方法.

QQmlApplicationEngine 在论坛中找到了一种方法:

QQuickWindow* window = (QQuickWindow*) engine.rootObjects().first();
QSurfaceFormat format;
format.setSamples(16);
window->setFormat(format)
Run Code Online (Sandbox Code Playgroud)

但它依赖于引擎的第一个根对象是a QQuickWindow,这在Qt docs中没有记录.所以我不想使用那种技术.

另一种方法是跳过QQmlApplicationEngine并创建一个QQuickView代替.这确实有一个setFormat让我能多采样方法,但我不知道,我是不可能输给由切换什么QQmlApplicationEngineQQuickView

换句话说,这两个类之间有什么区别?

我找到的一个区别是(从这里):

与QQuickView不同,QQmlApplicationEngine不会自动创建根窗口.如果您使用Qt Quick中的可视项目,则需要将它们放在窗口内.

这种特殊的差异对我来说无关紧要.

还有其他差异吗?

qt qml qtquick2 qquickview qqmlapplicationengine

23
推荐指数
2
解决办法
9505
查看次数

QML UnitTest缺少C++上下文属性

我发现这个老帖子面临同样的问题:如何模拟QML组件

不幸的是,没有解决方案.回顾一下问题:我有一个导入模块的QMLTestCase.但是这个模块依赖于一个根上下文属性,它通常会被添加到main.cpp.由于这是一个TestCase,我对如何QQmlApplicationEngine启动没有影响.

如何添加缺少的上下文属性?

qt unit-testing qml qtquick2 qqmlapplicationengine

7
推荐指数
1
解决办法
287
查看次数

如何将PyQt5 pyqtSlot连接到QML ListView信号"激活"?

我想将activated来自QML 的信号从我的Python3/PyQt5(5.6)代码连接ListView到一个pyqtSlot装饰方法.

我目前的方法是在我的代码中加载QML场景QQmlApplicationEngine,然后findChild()用来获取对我的引用ListView.

问题是,我只能在搜索QObject时找到ListView findChild(QObject, 'myList').但是htis对象并没有让我访问activated信号,很可能是因为这个信号只为QAbstractItemView它和它的后代定义.

所以,如果我尝试findChild(QListView, 'myList')结果是None.因此我无法activated接收信号.这是PyQt5中的错误还是我有另一种方式连接到这个信号?

这是一些最小的工作示例.

list.py:

import sys
from OpenGL import GL
from PyQt5.QtCore import QUrl, QObject
from PyQt5.QtWidgets import QApplication, QListView
from PyQt5.QtQml import QQmlApplicationEngine

# Main Function
if __name__ == '__main__':
    # Create main app
    app = QApplication(sys.argv)

    # Create QML engine
    engine = QQmlApplicationEngine(app)

    # Load the …
Run Code Online (Sandbox Code Playgroud)

listview qml python-3.x pyqt5 qqmlapplicationengine

7
推荐指数
1
解决办法
779
查看次数

QML Loader ... 如何卸载或删除加载到 Loader 元素的 qml 页面

我已将 MyItem.qml 作为源组件加载到 Loader 元素上。现在我想从 Loader 元素中删除或卸载该页面。我试图设置 source : "" & sourceComponent : "" ,还有 sourceComponent : "undefined"。但它没有用

qt qml qqmlapplicationengine

5
推荐指数
2
解决办法
5259
查看次数

错误:QQmlApplicationEngine 加载组件失败

我尝试注册一个类型,但出现此错误:

QQmlApplicationEngine 加载组件失败
qrc:/main.qml:5 模块“Komut”未安装

这是我正在使用的代码:

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
qmlRegisterType<Execom>("Komut",1,0,"Execom");
Run Code Online (Sandbox Code Playgroud)

c++ qt qml qqmlcomponent qqmlapplicationengine

4
推荐指数
1
解决办法
1万
查看次数

正确地重新加载QQmlApplicationEngine

我有一个基于QML的应用程序,main.qml从文件系统加载文件,如下所示:

myEngine->load("main.qml");
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我想"重新加载"引擎,以防main.qml被更新版本替换.

我到目前为止所尝试的是load()再次调用,假设引擎会像其他Qt类一样自动重置.

不幸的是,这种情况并非如此.如果我再次调用该方法,将出现另一个窗口,其中包含更新的qml文件的内容,而原始窗口保持打开状态并继续显示旧的qml文件.

为了解决这个问题,我尝试调用load(QUrl()),然后clearComponentCache()对新文件进行最终加载调用.这导致相同的效果.

任何想法如何在应用程序运行时"正确"重新加载QML引擎?

qt qml qqmlapplicationengine

4
推荐指数
2
解决办法
2479
查看次数

动态创建的自定义 QML 对象不可见

我有一个名为“Cell.qml”的自定义 QML 项目,我想将其动态插入到我的根窗口中并使其可见。我也尝试更改 z 属性,但我无法修复它,该对象仍然不可见(即使 root->dumpObjectTree() 的输出也表明该对象作为根窗口的子窗口存在)

这是执行代码后的结果

主程序

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlComponent>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;

    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));


    QObject *root = engine.rootObjects()[0];
    QQmlComponent component(&engine, "qrc:/Cell.qml");
    if (component.isReady()){
        QObject *object = component.create();
        object->setParent(root);
        engine.setObjectOwnership(object, engine.CppOwnership);
    }
    root->dumpObjectTree();

    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

主文件

import QtQuick 2.9
import QtQuick.Window 2.2

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")
}
Run Code Online (Sandbox Code Playgroud)

细胞.qml

import QtQuick 2.0
import QtQuick.Controls 2.3

Item{
    property string txt: "" …
Run Code Online (Sandbox Code Playgroud)

c++ qt qml qqmlcomponent qqmlapplicationengine

1
推荐指数
1
解决办法
940
查看次数