我有QInnerItem兩個 Q_PROPERTIES
class QInnerItem : public QObject {
Q_OBJECT
Q_PROPERTY(int bar1 READ bar1 WRITE setBar1 NOTIFY bar1Changed)
Q_PROPERTY(int bar2 READ bar2 WRITE setBar2 NOTIFY bar2Changed)
public:
QInnerItem(QObject* owner) : QObject(owner) {}
void setBar1(const int& bar1) {
m_bar1 = bar1;
emit bar1Changed();
}
int bar1() const {
return m_bar1;
}
void setBar2(const int& bar2) {
m_bar2 = bar2;
emit bar2Changed();
}
int bar2() const {
return m_bar2;
}
signals:
void bar1Changed();
void bar2Changed();
private:
int m_bar1;
int m_bar2;
};
由a和 intQOuterItem組成的 a 。QInnerItem
class QOuterItem : public QObject {
Q_OBJECT
Q_PROPERTY(int foo READ foo WRITE setFoo NOTIFY fooChanged)
Q_PROPERTY(QInnerItem bar READ bar)
public:
void setFoo(const int& foo) {
m_foo = foo;
emit fooChanged();
}
int foo() const {
return m_foo;
}
const QInnerItem& bar() const { //must return either the property's type or a const reference to that type
return m_bar;
}
signals:
void fooChanged();
private:
int m_foo;
QInnerItem m_bar;
};
這給了我錯誤:
moc_Model.cpp:264: error: C2280: 'QInnerItem &QInnerItem::operator =(const QInnerItem &)': attempting to reference a deleted function
我相信這是因為 QObject 有一個明確洗掉的復制賦值運算子:https ://doc.qt.io/qt-5/qobject.html#no-copy-constructor-or-assignment-operator
有沒有辦法在m_bar沒有復制賦值運算子的情況下訪問參考?
從同一個鏈接,它還說:
“主要的結果是你應該使用指向 QObject(或你的 QObject 子類)的指標,否則你可能會試圖使用你的 QObject 子類作為值。例如,沒有復制建構式,你不能使用一個子類QObject 作為要存盤在容器類之一中的值。您必須存盤指標。”
所以我試過:
class QOuterItem : public QObject {
Q_OBJECT
Q_PROPERTY(int foo READ foo WRITE setFoo NOTIFY fooChanged)
Q_PROPERTY(QInnerItem bar READ bar)
public:
void setFoo(const int& foo) {
m_foo = foo;
emit fooChanged();
}
int foo() const {
return m_foo;
}
const QInnerItem& bar() const { //must return either the property's type or a const reference to that type
return *m_bar;
}
signals:
void fooChanged();
private:
int m_foo;
QInnerItem* m_bar = new QInnerItem(this);
};
But this gives the exact same error.
How can I achieve what I am trying to do? i.e: Have a QObject with properties, and one of those properties is a QObject with it's own properties.
uj5u.com熱心網友回復:
您誤解了您參考的內容:“您應該使用指向 QObject 的指標”。實際的成員變數是否為指標并不重要。重要的是如何訪問 Q_PROPERTY。所以你可以做這樣的事情:
class QOuterItem : public QObject {
Q_OBJECT
Q_PROPERTY(QInnerItem *bar READ bar)
public:
QInnerItem *bar() const {
return &m_bar;
}
private:
QInnerItem m_bar;
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/443332.html
