标签: qtquick2

qt qml和qt之间的差异很快

Q1:我对qml,quick1.0和quick2.0感到困惑.它们之间有什么区别.

我使用基于qt 5.1.1的qt creator 2.8.1.我想开发一个桌面程序,我应该使用哪种技术?

Q2:如何将数据导出到快速程序?我只找到关于qml的文档v 4.7.

qt qml qt-quick qtquick2

64
推荐指数
2
解决办法
3万
查看次数

如何在使用QQmlApplicationEngine时从C++访问我的Window对象属性?

我一直在努力学习QtQuick用于GUI创建,但我一直很难理解如何从我的测试程序的C++部分与QML对象进行交互.

这是我简单的QML文件:

import QtQuick 2.2
import QtQuick.Window 2.1

Window {
    id: mainWindow
    visible: true
    width: 800
    height: 800
    color: "#FFFF0000"

    MouseArea {
        anchors.fill: parent
        onClicked: Qt.quit()
    }

    Rectangle {
        id: testRect
        width: 100
        height: 100
        anchors.centerIn: parent
        color: "#FF0000FF"
    }
}
Run Code Online (Sandbox Code Playgroud)

这是随附的基本C++文件(由QtCreator自动生成):

#include <QGuiApplication>
#include <QQmlApplicationEngine>

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

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

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

我的问题是我不知道如何访问我的'Window'QML对象,因此,我无法改变它的任何属性或其子项的属性!QtQuick文档的这一部分显示了从C++代码中访问QML对象的两种方法,但它们似乎都不适用于这个'QQmlApplicationEngine'加载方案.我也看到人们使用'QApplicationViewer'和'QDeclaritiveView'之类的东西,但我似乎无法在官方文档中找到那些..

我对QtQuick感到非常沮丧; QML的"简单性"似乎在大量冲突的文档和C++与QML之间错综复杂的界面中丢失.无论如何我在使用QQmlApplicationEngine方法时访问我的QML对象?我尝试过使用'QuickView',但它似乎不适用于Window QML对象..?QQmlApplicationEngine仅对单个文件中的QML应用程序有用吗?到目前为止,我读过的每一篇文档和教程都显示了不同的东西......

任何帮助或澄清将不胜感激.理想情况下,我想知道如何通过我的C++代码访问和修改QML对象(如'mainWindow','testRect'和其他文件中的其他对象).

c++ user-interface qt qml qtquick2

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

如何从QML访问C++枚举?

class StyleClass : public QObject {
public:
    typedef enum
        {
            STYLE_RADIAL,
            STYLE_ENVELOPE,
            STYLE_FILLED
        }  Style;

    Style m_style;
    //...
};
Run Code Online (Sandbox Code Playgroud)

.h文件包含上面的代码.如何通过QML访问上面的枚举?

c++ qt qml qtquick2

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

QML中的图像圆角

令我惊讶的是,该Image组件没有radius属性.我尝试通过将图像放在圆形中来模拟圆角Rectangle,但它不会剪切角落.

Rectangle {
    anchors.right: rectContentBg.left
    anchors.top: rectContentBg.top
    anchors.margins: 8

    radius: 8

    width: 64
    height: 64

    Image {
        id: imgAuthor

        opacity: 1
        smooth: false

        anchors.fill: parent

        source: "qrc:/res/sample_avatar.jpg"
    }
}
Run Code Online (Sandbox Code Playgroud)

如何正确创建圆角图像?

qml qt5 qtquick2

34
推荐指数
7
解决办法
2万
查看次数

QML:列出控制台中的所有对象成员/属性

有没有办法在QML和Qt 5.1中列出所有对象成员/属性?

如:

var obj=myQObject;
console.log(obj)
// expected output:
// obj { x:123..... }
Run Code Online (Sandbox Code Playgroud)

这对调试非常有帮助.

qt qml qt5 qtquick2

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

从QML访问C++ QLists

如果我在C++中有一个列表,我该如何将它暴露给QML(在Qt5/QtQuick 2中)?似乎QML只能理解 - QObject派生类,这是一个问题,因为QObjects不能放入QList或复制.我该怎么做呢:

struct Thing
{
    int size;
    QString name;
};

class ThingManager : public QObject
{
    Q_OBJECT

    // These macros support QtQuick, in case we one day want to use it to make a slick
    // interface (when QML desktop components are released).
    Q_PROPERTY(QList<Thing> things READ things NOTIFY thingssChanged)

public:
    // ...
    QList<Thing> things() const;

    // ...

};
Run Code Online (Sandbox Code Playgroud)

所以我可以在QML中做这样的事情:?

var a = thingManager.things[0].name;
Run Code Online (Sandbox Code Playgroud)

c++ qlist qml qt5 qtquick2

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

如何使用QML在父MouseArea中包含子鼠标悬停事件?

我想在QML中实现以下场景.

脚本


这是ListView元素的示例/简化委托:

Component {
    Item {
         id: container
         MouseArea {
         anchors.fill: parent
         hoverEnabled: true

         onClicked: {
             container.ListView.view.currentIndex = index
             container.forceActiveFocus();
         }
         onEntered: {
             actionList.state = "SHOW";
             myItem.state = "HOVER"
         }
         onExited: {
             actionList.state = "HIDE";
             myItem.state = "NORMAL"
         }
         Rectangle {
             id: myItem
             color: "gray"
             anchors.fill: parent
             Row {
                 id: actionList
                 spacing: 5; anchors.fill: parent
                 Image {
                     id: helpAction
                     source: ""    //Some image address
                     width: 16; height: 16; fillMode: Image.PreserveAspectFit
                     states: [
                         State {
                             name: "NORMAL"
                             PropertyChanges { …
Run Code Online (Sandbox Code Playgroud)

qt qml qt5 qtquick2

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

错误:QT中的未知模块:qml quick - Qt Creator

我通过Linux Mint 18(x86_64)上的软件管理器安装了Qt Creator .我做了一些示例项目,以及一些依赖项/ packages/libraries /缺少的东西,所以我安装了via apt.我做了一个QtQuick应用程序,在问题中有一条错误消息说:

 error: Unknown module(s) in QT: qml quick
Run Code Online (Sandbox Code Playgroud)

我读到有一些库可以构建和链接,但我不知道在哪里可以找到它们.

c++ qt qt-creator linux-mint qtquick2

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

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:Component vs Item作为容器

ComponentItemQML有什么区别?这里的文档并不完全清楚.用作多个小部件的容器的首选类型是什么?可以替换Rectangle吗?

例如,以下声明的区别是什么:

Item {
    id: itemWidget

    Rectangle { id: one }
    Rectangle { id: two }
}
Run Code Online (Sandbox Code Playgroud)

Component {
    id: componentWidget

    Rectangle { id: one }
    Rectangle { id: two }
}
Run Code Online (Sandbox Code Playgroud)

为什么我们通常Component在宣布时使用delegate

qt delegates qml qtquick2 qqmlcomponent

21
推荐指数
2
解决办法
6582
查看次数