我有一个私有类成员变量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 // CAMERACONTROL_H
我在构造函数内将 statusChanged
信号连接到 outputStatus
槽:
#include "CameraControl.h"
CameraControl::CameraControl(QObject *parent) :
QObject(parent)
{
this->cameraHandle = nullptr;
this->connect(this, &CameraControl::statusChanged, this, &CameraControl::outputStatus);
this->status = "Change status text";
}
运行应用程序并通过另一个对象更改状态时,我没有得到任何输出,也没有收到来自qt的关于此问题的消息。
请注意,这不是实际实现。status经常通过各种成员函数进行更改,而没有任何输出。然而,connect调用以及statusChanged和outputStatus的实现与本问题完全相同。
因为Q_PROPERTY具有与成员相同的名称,所以我认为这可能是一个问题,并将Q_PROPERTY更改为以下内容,但没有任何区别:
Q_PROPERTY(QString qstatus MEMBER status NOTIFY statusChanged)
有人知道问题出在哪里吗?
Q_PROPERTY
将是无用的,对吗? - goulashsoup