标签: qtquick2

在QML中动态添加元素到SplitView

我正在使用QML,我想动态地向SplitView添加元素,例如.onMouseClick,但到目前为止我没有找到答案.

到目前为止我发现的是SplitView它的默认属性设置为它的第一个孩子的data属性.所以我想我应该尝试添加新动态创建的组件,并将父组设置为该child(splitView1.children[0]).不幸的是,这也不起作用.在组件加载完成后,第一个子节点的子节点数为零(看起来像SplitLayout的Component.onCompleted事件调用一个将这些子节点移动到其他地方的函数).因此,添加的子项不会呈现(并且不响应任何布局附加属性).

请参阅以下代码段:

import QtQuick 2.1
import QtQuick.Controls 1.0
import QtQuick.Layouts 1.0

ApplicationWindow {
    width: 600
    height: 400

    SplitView {
        anchors.fill: parent

        Rectangle {
            id: column
            width: 200
            Layout.minimumWidth: 100
            Layout.maximumWidth: 300
            color: "lightsteelblue"
        }

        SplitView {
            id: splitView1
            orientation: Qt.Vertical
            Layout.fillWidth: true

            Rectangle {
                id: row1
                height: 200
                color: "lightblue"
                Layout.minimumHeight: 1
            }

//            Rectangle {               //I want to add Rectangle to splitView1 like this one, but dynamicly eg.onMouseClick
//                color: "blue"
// …
Run Code Online (Sandbox Code Playgroud)

qt qml qt-quick qtquick2

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

Qt 5有没有DatePicker控件?

我正在为QtQuick 2.0编写我的第一个QML/Javascript应用程序.我需要放置一个DatePicker控件,但是我没有在QtQuick.Controls下找到任何像这样的控件 - 实际上也没有.

我开始相信没有办法在QML中调用'native'DatePicker.我必须实现一个还是存在一个?

datepicker qml qtquick2

11
推荐指数
2
解决办法
8870
查看次数

如何实现QML ListModel,就像QAbstractListModel派生模型的get方法一样

我想在QML中使用QAbstractListModel派生模型.将模型绑定到视图已经很有效.

我想要实现的下一件事是能够访问特定项目及其角色,就像使用QML ListModel一样

grid.model.get(index).DisplayRole
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何在我的QAbstractListModel派生模型中实现这个get方法.

任何提示?

qt qabstractitemmodel qml qt-quick qtquick2

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

部署Qt5 QML应用程序

为了测试QML部署,我创建了一个非常简单的QML应用程序.这是代码:

main.cpp中

#include <QApplication>
#include <QQmlApplicationEngine>
#include <QFile>

int main(int argc, char **argv) {
    QApplication app(argc, argv);
    QQmlApplicationEngine engine;

    QString path = app.applicationDirPath() + "/qml/main.qml";
    if(QFile::exists(path))
        engine.load(path);
    else {
        return 1;
    }
    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

main.qml

import QtQuick 2.2
import QtQuick.Controls 1.2

ApplicationWindow {
    id: mainWindow
    title: "Test window"
    width: 800
    height: 600
    visible: true
}
Run Code Online (Sandbox Code Playgroud)

为了确保系统中没有安装任何开发库,我设置了一个纯Windows XP安装的虚拟机.然后,我按照此处所述的说明将所有 Qt5*.dll 复制到程序目录中,以及platforms/qwindows.dll和icu*52.dll.Dependency Walker确认没有遗留任何破坏的依赖关系,即一切都应该已经正确设置.

但是,由于某些原因,当我运行我的应用程序时,我什么也看不见.既不是窗口,也不是错误消息.从控制台运行也没有错误.尽管如此,我可以看到我的应用程序在任务管理器中运行,就像它在后台运行一样.在开发机器上运行应用程序没有问题:应用程序正确启动,我可以看到它的窗口.

我究竟做错了什么?如何部署QML应用程序以确保它可以在任何其他 - 非开发 - 机器上运行?

deployment qt qml qtquick2

11
推荐指数
2
解决办法
7323
查看次数

使用原始OpenGL调用绘制Qml项时出现问题

我想使用原始OpenGL调用在QtQuick场景中绘制单个项目.我决定采取这个问题的建议方法.

我创建了一个Qt Quick项目,QQuickFramebufferObject并将其公开给QML Renderer:(代码基于Qt示例:场景图 - 渲染FBO)

class FboInSGRenderer : public QQuickFramebufferObject {
    Q_OBJECT
public:
    Renderer *createRenderer() const;
};
Run Code Online (Sandbox Code Playgroud)

源文件:

class LogoInFboRenderer : public QQuickFramebufferObject::Renderer {
    public:
        LogoInFboRenderer() { }

        void render() {
            int width = 1, height = 1;
            glEnable(GL_BLEND);
            glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
            glColor4f(0.0, 1.0, 0.0, 0.8);
            glBegin(GL_QUADS);
            glVertex2f(0, 0);
            glVertex2f(width, 0);
            glVertex2f(width, height);
            glVertex2f(0, height);
            glEnd();

            glLineWidth(2.5);
            glColor4f(0.0, 0.0, 0.0, 1.0);
            glBegin(GL_LINES);
            glVertex2f(0, 0);
            glVertex2f(width, height);
            glVertex2f(width, 0);
            glVertex2f(0, height);
            glEnd();

            update();
        } …
Run Code Online (Sandbox Code Playgroud)

opengl qt qml qt-quick qtquick2

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

"var"和"variant"是一回事吗?

根据我的理解,要在QML中将属性设为数组,您必须将其指定为类型variantvar:

property var myArray:[]

这看起来与以下内容完全相同:

property variant myArray:[]

这是真的?

qt qml qtquick2

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

如何在QML Javascript中创建和使用C++对象

我的应用程序使用c ++和QML.

我在C++部分定义了几个对象来访问SQL等.

看起来像:

class MyObject : public QObject
{
    Q_OBJECT
public:
    MyObject(QObject *parent = 0);
    Q_INVOKABLE void someFunction(const QString &query);
};

qmlRegisterType<MyObject>("xxx.xxx", 1, 0, "MyObject");
Run Code Online (Sandbox Code Playgroud)

理想情况下,我只需要在JML中使用这些对象,而不是在QML中.

我尝试了很多例子并阅读了所有文档,但仍然无法解决我的问题.

所以我的问题:

  • 如何在Javascript中实例化C++中定义的对象?我试过var obj = Qt.createComponent("MyObject");但看起来不行.是否有可能以正常的JS风格定义新对象 - var obj = new MyObject;
  • 如何在javascript中访问此创建的对象?我试过obj.someFunction("xxx")但是有一些错误 - TypeError: Property 'someFunction' of object QQmlComponent(0x3605f5c0) is not a function.我在这里做错了什么?我的对象派生自QObject,而不是来自QQmlComponent.

javascript qml qt-quick qt5 qtquick2

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

QML文本中的HTML格式

我有一部分HTML代码,显示小表.在浏览器中,它看起来像在图片中: HTML表格

但是,当我想在Text QML(根据文档,应该支持HTML)中显示它时,我看到:

QML中的HTML表格

(橙色矩形是矩形的一部分,是父的mytext)

Text {
     id: mytext
     anchors.fill: parent
     text: "<div><table border='1'><caption><h4>Test stats</h4>"+
     "</caption><tr bgcolor='#9acd32'><th/><th>Number1</th><th>Number2</th></tr> <tr><th>Line1</th>"+
        "<td> 0 </td> <td> 1 </td> </tr> <tr><th>Line2</th> <td> 0 </td> <td> 1 </td> </tr>"+
        "<tr><th>Line3</th> <td> 0 </td> <td> 0 </td> </tr> <tr><th>Line4</th> <td> 1 </td> <td> 0 </td> </tr>"+
        "<tr><th>Line5</th> <td> 1 </td> <td> 1 </td> </tr> <tr><th>Line6</th> <td> 1 </td> <td> 1 </td> </tr> </div>"
}
Run Code Online (Sandbox Code Playgroud)

那么如何在QML(QtQuick 2.0)中正确显示这个HTML表格呢?是否可以不使用WebView?

html qt qml qtquick2

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

QML TableView具有动态列数

我一直在尝试使用QML TableView来显示QAbstractTableModel.等式中缺少的部分似乎是不可能有一个可变数量的列TableView,尽管覆盖QAbstractItemModel::roleNames哪个应该告诉Qt我的列的数量和名称.我尝试仅使用QML进行测试:

import QtQuick 2.0
import QtQuick.Controls 1.1

Rectangle {
    anchors.fill: parent
    property real showImage: 1.0
    width: 500
    TableView {
        id: myTable
        model: myModel
        //        TableViewColumn {
        //            role: "title"; title: "Name"; width: 200
        //        }
    }

    ListModel {
        id: myModel
        ListElement {
            title: "item one"
        }
        ListElement {
            title: "item two"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在运行时,尽管TableView包含ListElement在其中定义了角色的s的模式,但这并未显示任何内容.

但是,如果上面的代码被取消注释并且TableViewColumn定义了a ,则该列将按预期显示该角色的数据,但该表仍将不显示任何其他角色.显然,这只适用于静态定义的列数,而不适用于直到运行时才知道列数的情况.

给出的示例与我的实际示例基本相同,只是我的模型是用C++定义的.

似乎这可能已经在这里被问过,但它没有得到任何回应.

编辑:我曾尝试调用javascript函数:

function …
Run Code Online (Sandbox Code Playgroud)

c++ qt qml qtquick2

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

QML中的时间选择器

我需要让用户在QML应用程序中选择日期和时间.对于选择日期,有CalendarQtQuick控件.我没有找到类似的控件让用户选择一天中的时间.

在互联网上有几个例子,如GrogHarmattan.然而,我认为它们没有像其他QtQuick控件那样与原生外观和感觉集成.

有没有我不知道的标准方法,我没有遇到的好的替代方案或者有关选择的建议?

qt qml qt5 qtquick2 qtquickcontrols

10
推荐指数
2
解决办法
8041
查看次数