标签: qproperty

Qt中Q_PROPERTY有什么意义?

我无法理解Q_PROPERTY的用法.Q_PROPERTY如何帮助使程序防御?它是干什么用的?我见过论坛,但真的无法进行论坛.我已经理解了这个例子,但不是它的用法.

这是一个例子,我从中获得了什么.我知道阅读会给予阅读权限.

write属性将赋予仅写入权限.但它有什么需要呢?有人可以举例说明吗?

 class MyClass : public QObject
 {
     Q_OBJECT
     Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged)
     Q_ENUMS(Priority)

 public:
     MyClass(QObject *parent = 0);
     ~MyClass();

     enum Priority { High, Low, VeryHigh, VeryLow };

     void setPriority(Priority priority)
     {
         m_priority = priority;
         emit priorityChanged(priority);
     }
     Priority priority() const
     { return m_priority; }

 signals:
     void priorityChanged(Priority);

 private:
     Priority m_priority;
 };
Run Code Online (Sandbox Code Playgroud)

c++ qt qobject qt-signals qproperty

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

如何将 QObject 指针的属性公开给 QML

我对我的班级进行了非常简短(和部分)的描述,以表明我的问题。基本上我设置了两个属性。

class Fruit : public QObject
{
Q_OBJECT
  ....
public:
    Q_PROPERTY( int price READ getPrice NOTIFY priceChanged)

    Q_PROPERTY(Fruit * fruit READ fruit WRITE setFruit NOTIFY fruitChanged)
}
Run Code Online (Sandbox Code Playgroud)

在我的 QML 中,如果我访问该price属性,它会运行良好。但是,如果我访问fruit明显返回的属性Fruit,然后尝试使用它的price属性,那是行不通的。这不应该这样工作吗?

Text {
    id: myText
    anchors.centerIn: parent
    text: basket.price // shows correctly
    //text: basket.fruit.price // doesn't show
}
Run Code Online (Sandbox Code Playgroud)

第二个返回的Fruit也是一个属性,它有price属性,但它似乎无法访问该属性?这应该有效吗?

更新

我包括我的源代码。我用 创建了一个新的演示HardwareComponent,这样更有意义。我试图根据我收到的答案让它工作,但没有运气。

HardwareComponentComputerclass 是和的基类CPU

主程序

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>

class HardwareComponent …
Run Code Online (Sandbox Code Playgroud)

qt qml qtquick2 qproperty

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

从私有成员公开 Q_PROPERTY

在我正在编写的代码中,我需要Q_PROPERTY通过一个集成从私有成员公开QWidget。像这样的东西会很好:

class MyWidget: public QWidget{
   Q_OBJECT
   Q_PROPERTY(QString headerText MEMBER myLabel.text NOTIFY QLabel::notify)

private:
   QLabel myLabel
}
Run Code Online (Sandbox Code Playgroud)

是否可以这样做以及如何这样做?或者我是否必须手动编写所有获取/设置方法?

c++ qt qproperty

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

转储QObject派生对象的所有属性

如何转储Qt对象的所有属性?

用于调试目的,例如分析工厂返回的对象时.

c++ qt qproperty

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

QList &lt;QList &lt;QString &gt;&gt;传递到QML

我正在尝试将2d QList作为Q_PROPERTY传递给QML,但是在QML内部,并且我实际上无法访问任何信息。

一些代码:

c ++:q_property由构造函数中的q_invokable函数填充:

void Class::createNewGameArray(){
QList<QList<QString>> testArray;

for( int i = 0; i < _intervals.size(); ++i) {
    QList<QString> innerArray;
    testArray.append(innerArray);
        testArray[i].append(_intervals[i]);
        testArray[i].append("Audio");
}
for( int i = 0; i < _intervals.size(); ++i) {
    QList<QString> innerArray;
    testArray.append(innerArray);
        testArray[i+12].append(_intervals[i]);
        testArray[i+12].append("Text");
}
 std::random_shuffle(testArray.begin(),testArray.end());
Class::setGameArray(testArray);
emit gameArrayChanged(_newGameArray);
Run Code Online (Sandbox Code Playgroud)

返回以下内容:

(("M7", "Text"), ("M3", "Text"), ("m3", "Text"), ("M6", "Audio"), ("TT", "Audio"), ("P4", "Text"), ("m7", "Audio"), ("m2", "Text"), ("m6", "Audio"), ("m6", "Text"), ("M7", "Audio"), ("P5", "Text"), ("P4", "Audio"), ("m2", "Audio"), ("M2", "Audio"), ("M3", "Audio"), ("P5", "Audio"), …
Run Code Online (Sandbox Code Playgroud)

c++ qt qlist qml qproperty

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

Qt - Q_PROPERTY 的 NOTIFY 信号未发出关于成员更改的信息

我有一个私有类成员变量status,我想在每次更改时发出一个带有其值的信号。因此,我使用Q_PROPERTY并指定了一个信号NOTIFY

#ifndef CAMERACONTROL_H
#define CAMERACONTROL_H

#include <QObject>
#include <iostream>

class CameraControl : public QObject
{
        Q_OBJECT
        Q_PROPERTY(QString status MEMBER status NOTIFY statusChanged)
    private:
        QString status;

    public:
        explicit CameraControl(QObject *parent = nullptr);
        ~CameraControl();
        void changeStatus()
        {
            std::cout << "changeStatus called" << std::endl; // The function definitely gets called!
            this->status = "Change status again!";
        }

    public slots:
        void outputStatus(const QString &status) {
            std::cout << status.toStdString() << std::endl;
        }

    signals:
        void statusChanged(const QString &status);

};

#endif // …
Run Code Online (Sandbox Code Playgroud)

c++ qt qt-signals qproperty qt5.9

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

我可以访问在 C++ 中声明为 MEMBER 的 QPROPERTY 吗?

我有一个QQuickItem类,其中一些成员在 QML 中使用,因此它们的声明如下:

Q_PROPERTY (bool myBool MEMBER _myBool NOTIFY myBoolChanged)
Run Code Online (Sandbox Code Playgroud)

如果我想在 C++ 代码中(从另一个类)访问此成员,我是否有免费的get-accessor ?它的语法是什么?

我不清楚该文档:

如果未指定 READ 访问器函数,则需要 MEMBER 变量关联。这使得给定的成员变量可读可写,而无需创建 READ 和 WRITE 访问器函数。

这是否使成员只能在 QML 中或在 C++ 中可读可写?

c++ qt qproperty

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

如何覆盖Q_Property?

考虑这些类:

Class A : public QObject {
    ...
    Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged)

    virtual int value() { return m_value; }
    void setValue(int v) { m_value = v; Q_EMIT valueChanged();}
    ...

};

Class B : public A {
    ...

    int value() { return m_value * 2; }

    ...
};
Run Code Online (Sandbox Code Playgroud)

访问属性值时,直接调用A类方法而不是B类.

到目前为止,为了解决这个明显的限制,我复制了属性代码并连接了每个类的信号.

这是最好的解决方案吗?

有没有人看到潜在的问题(由于属性具有相同的名称)?

polymorphism qt overriding qproperty qt5.4

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

标签 统计

qproperty ×8

qt ×8

c++ ×6

qml ×2

qt-signals ×2

overriding ×1

polymorphism ×1

qlist ×1

qobject ×1

qt5.4 ×1

qt5.9 ×1

qtquick2 ×1