标签: qt-quick

如何将C++模型公开给QML

我正在写一个QML + Qt应用程序.我定义了一个这样的类:

class MainClass : public QObject
{
    Q_OBJECT

public:
    rosterItemModel m_rosterItemModel;
.
.
.
}
Run Code Online (Sandbox Code Playgroud)

rosterItemModel模型是从QAbstractListModel派生的类.我使用这个函数将MainClass暴露给qml部分:

qmlRegisterType<MainClass>("CPPIntegrate", 1, 0, "MainClass");
Run Code Online (Sandbox Code Playgroud)

现在我想将这个模型(m_rosterItemModel)从MainClass分配给QML中的ListView的模型属性.我尝试了以下方法,但没有一个是有用的:(

  • 我尝试使用Q_PROPERTY将m_rosterItemModel声明为PROPERTY.我不能这样做,因为它说QAbstractListModel不可复制.
  • 我试图使用MainClass中的Q_INVOKABLE函数在qml文件中获取指向m_rosterItemModel的指针.但它也没有用.

有人能帮助我吗?

qt qml qt-quick

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

如何将QList从QML传递到C++/Qt?

我正在尝试将QListQML中的整数传递给C++代码,但不知怎的,我的方法无效.使用以下方法我得到以下错误:

left of '->setParentItem' must point to class/struct/union/generic type
type is 'int *'
Run Code Online (Sandbox Code Playgroud)

任何麻烦拍摄问题的输入都非常感谢

以下是我的代码段

头文件

Q_PROPERTY(QDeclarativeListProperty<int> enableKey READ enableKey) 

QDeclarativeListProperty<int> enableKey(); //function declaration
QList<int> m_enableKeys;
Run Code Online (Sandbox Code Playgroud)

cpp文件

QDeclarativeListProperty<int> KeyboardContainer::enableKey()
{
    return QDeclarativeListProperty<int>(this, 0, &KeyboardContainer::append_list);
}

void KeyboardContainer::append_list(QDeclarativeListProperty<int> *list, int *key)
{
    int *ptrKey = qobject_cast<int *>(list->object);
    if (ptrKey) {
        key->setParentItem(ptrKey);
        ptrKey->m_enableKeys.append(key);
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ qt qml qt-quick

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

如何防止模糊的QtGraphicalEffects被切断?

带有截止阴影的qml窗口

我正在尝试使用带有QtGraphicalEffects的QtQuick 2为我的项目添加效果,但我不太明白如何调整真正模糊的效果来看起来正确.

在这种情况下,投影的尺寸很小,并且在完全消失之前会在边缘处被剪裁.我怎样才能让它很好地融入而不会被切断?

这是窗口的代码:

import QtQuick 2.0
import QtGraphicalEffects 1.0

Item {
    width: 250
    height: 75

    Text {
        id: textItem
        x: 10; y: 10
        text: "how can I fix my shadow?"
    }

    DropShadow {
        id: shadowEffect
        anchors.fill: textItem
        source: textItem

        radius: 8
        samples: 16

        horizontalOffset: 20
        verticalOffset: 20
    }
}
Run Code Online (Sandbox Code Playgroud)

qt qml qt-quick

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

QDeclarativeView没有这样的文件ot目录.在qtCreator中运行QML和c ++应用程序

我想要做的是在qtcreator中测试QML.我有基于Qt 5.1.1的最新版Qt Creator 2.8.1.

我想将qml添加到我的c ++应用程序中.我尝试了很多方法.使用QDeclarativeView最合理的外观,但我不能包含它.

在专业文件中我添加QT + =核心gui声明我尝试添加快速,qml以及然后我仍然没有看到qtquick或声明性库.

我可以通过go工具 - > external-> qtquick-> qmlviewer在qmlViewer中看到"Qt Quick 2 UI"项目当我尝试构建Qt Quick 2应用程序(内置类型)时,我得到3x"无法打开包含文件"QtQuick/QQuickView"没有这样的文件或目录.

我想用qml做简单的c ++应用程序,谢谢你的帮助.我阅读了很多教程,但大多数都是在构建之后开始的.我有运行应用程序没有qml代码的问题.

c++ qt qt-creator qml qt-quick

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

如何在TableView rowDelegate中右键单击显示上下文菜单

我想在右键单击TableView行时显示上下文菜单.我试过这段代码:

import QtQuick 2.0
import QtQuick.Controls 1.0

TableView { id: tableView
    width: 300
    height: 200

    TableViewColumn { role: 'a'; title: 'a'; width: 50 }
    TableViewColumn { role: 'b'; title: 'b'; width: 50 }
    model: ListModel {
        ListElement { a: 1; b: 2 }
        ListElement { a: 3; b: 4 }
        ListElement { a: 5; b: 6 }
        ListElement { a: 7; b: 8 }
        ListElement { a: 9; b: 10 }
        ListElement { a: 11; b: 12 }
    }

    Menu …
Run Code Online (Sandbox Code Playgroud)

qt qml qt-quick qtquick2 qt5.1

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

C++/QML项目兼容Qt 4(QtQuick 1.x)和Qt 5(QtQuick 2.x)

在编写不使用QML并且不依赖于新的Qt 5功能的Qt应用程序时,我们可以使用Qt 4和Qt 5编译它(除了少数源不兼容性).

当我们想要使用Qt 5功能但希望回归到同等但效率较低的Qt 4解决方案时,我们可以简单地使用an #if来检查Qt版本,例如使用新的QStringLiteral但是QString::fromUtf8在使用Qt 4编译时回落.

我们怎么能用QtQuick做同样的事情?请注意,有可能使用QDeclarativeViewQtQuick 1.xQt中5,但不会使用Qt的从5新场景图仅1.x被支持QDeclarativeView,只2.x支持在QQuickView,即使我不使用快速2.0中引入的功能.

我想要的是:

  • 用Qt 4编译时,请QDeclarativeView和朋友一起使用; 在QML中:import QtQuick 1.x
  • 使用Qt 5编译时,请使用新QQuickView朋友; 在QML中:import QtQuick 2.x
  • 只有一组QML文件,但没有一个用于QtQuick 1.x和另一个用于QtQuick 2.x

关于C++部分,这似乎很容易.在Qt 4中,我们可以简单地添加:

#include <QApplication>
#include <QDeclarativeView>
#include <QDeclarativeEngine>
typedef QApplication QGuiApplication;
typedef QDeclarativeView QQuickView;
Run Code Online (Sandbox Code Playgroud)

然后在Qt 4和Qt 5中使用QGuiApplication,QQuickView等等.但是当QML文件包含导入声明时QtQuick,我无法添加一个#if来决定1.x和2.x. 是否有正式的方法,比方说,添加一个别名 …

c++ qt qml qt-quick qtquick2

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

Direct3D场景之上的QtQuick 2.0场景

我一直试图想出一个解决方案,将QtQuick 2.0场景与Direct3D场景一起使用很长一段时间,但不是很成功.我的目标是让Direct3D引擎以合理的速度(60 FPS?)与QML UI一起运行.这两件事都可以自己运行150-200 FPS.但是当被迫在一个窗口内合作时,一切都只是香蕉.我调查了几种方法,但似乎没有一种方法足够:

解决方案A:将Direct3D场景渲染到纹理中,使用QImage和QQuickPaintedItem进行可视化

  • 这个解决方案效果很好,并且它似乎是网上其他人的首选.然而,它很慢.全高清无法超过18-20 FPS.从每个帧的GPU(D3D)到CPU(QImage)再到GPU(QML渲染器)的纹理传输链中明显存在瓶颈.尤其是QML端的CPU-> GPU处理速度太慢了!

解决方案B:将QtQuick场景渲染到FBO中,然后使用Direct3D纹理

  • 这基本上是以前的解决方案.当UI不需要更新时,速度会更好一些.一旦开始制作动画,一切都会再次下降到18-20 FPS.QOpenGLFramebufferObject :: toImage()显然需要时间.在两侧实施纹理/ FBO双缓冲以减少失速并没有多大帮助.

解决方案C:在具有Direct3D场景的QWidget顶部启用透明度的QQuickView

  • 这种方法也不幸运.只有当QQuickView在自己的窗口中时,透明度似乎才有效.一旦我把它放在同一个窗口的D3D QWidget之上,它立即停止工作并变得完全不透明.有人试图在那里做类似的事情:http://qt-project.org/forums/viewthread/5484,但我根本没有运气解决方案.也许保持两个完全分开的窗口(主D3D窗口+无框透明QML窗口)一直在彼此之上就可以了,但这听起来很傻.

解决方案X:修改ANGLE库并尝试使用Direct3D渲染器提取和共享D3D设备上下文

  • 还没有尝试过,尽可能避免任何库修改.这甚至是一个明智的选择吗?

我这里显而易见的问题是:我做错了吗?什么是首选解决方案?A,B,C,X或者可能是完全不同的东西?有人能指出我正确的方向吗?

TL; DR: 在Direct3D场景之上渲染QML场景的最快方法是什么?

qt direct3d qml qt-quick qtquick2

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

使用Qt Quick创建可伸缩,有光泽/闪亮的按钮

我想用Qt Quick创建下面的光泽按钮(最好是纯QML,没有C++):

有光泽的按钮

它需要是可扩展的,所以我不能使用PNG等.

我的代码到目前为止:

import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2

ApplicationWindow {
    id: window
    color: "#cccccc"
    width: 200
    height: 200

    Button {
        id: button
        width: Math.min(window.width, window.height) - 20
        height: width * 0.3
        anchors.centerIn: parent
        text: "Button"

        style: ButtonStyle {
            background: Rectangle {
                gradient: Gradient {
                    GradientStop {
                        position: 0
                        color: "#bbffffff"
                    }
                    GradientStop {
                        position: 0.6
                        color: "#00c0f5"
                    }
                }

                border.color: "grey"
                border.width: height * 0.05
                radius: height / 5
            }

            label: Label {
                text: button.text …
Run Code Online (Sandbox Code Playgroud)

qt button qml qt-quick qtquickcontrols

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

如何创建分组/嵌套属性?

我试图做'font.family'或'anchors.fill'等嵌套属性,但我不能以正常方式初始化它们,因为它打印'无法分配给不存在的属性'.相反,我被迫使用Component.onCompleted方法.怎么了?

MyButtonStyling.qml:

import QtQml 2.1

QtObject
{
    property QtObject background: QtObject
    {
        property color pressed: "#CCCCCC"
        property color enabled: "#666666"
        property color disabled: "#555555"
    }
}
Run Code Online (Sandbox Code Playgroud)

main.qml:

import QtQuick 2.0

Item
{
    width: 400
    height: 300
    MyButton
    {
        text: "TEST"
        styling: MyButtonStyling
        {
            //background.enabled: "#1B2E0A" //Cannot assign to non-existent property "enabled"
            Component.onCompleted:
            {
                background.enabled = "#1B2E0A" //Works
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

MyButton.qml:

import QtQuick 2.0
import QtQuick.Controls 1.0
import QtQuick.Controls.Styles 1.0

Button
{
    property QtObject styling: MyButtonStyling {}

    implicitWidth: 80 …
Run Code Online (Sandbox Code Playgroud)

qt qml qt-quick qt5 qtquick2

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

用QML测量经过的时间

让我们考虑以下示例:我们有一个Qt Quick Controls Button.用户在5秒内点击两次.在Button第一次推送之后,QML Timer正在运行这5秒钟.我们希望测量两次点击之间经过的时间,精确度为毫秒.

不幸的是,QML Timer无法向我们显示经过的时间.

正如BlackBerry论坛上所建议的那样,可以比较日期.但是,这不是很方便,因为第一次点击可能发生在31 Dec 2015, 23:59:55第二次点击,第二次点击1 Jan 2016, 00:00:05,检查必须是复杂的.

还有更好的选择吗?

time qt qml qt-quick qtquick2

6
推荐指数
3
解决办法
9742
查看次数

标签 统计

qml ×10

qt ×10

qt-quick ×10

qtquick2 ×5

c++ ×3

button ×1

direct3d ×1

qt-creator ×1

qt5 ×1

qt5.1 ×1

qtquickcontrols ×1

time ×1