我希望每当特定QString的值发生变化时,在我的Qt应用程序中发生更改。我没有在QString
文档中找到任何对信号的引用,所以我需要子类QString
并实现我自己的信号,还是有其他优先选择?Qt中的可观察QString
0
A
回答
3
你还没有找到信号的任何引用,因为这不是你如何得到的Qt从数据类的通知。你需要做的是使用the property system。
只需将字符串实现为某个核心逻辑对象的Q_PROPERTY
即可。
// in some QObject derived class
Q_PROPERTY(QString text MEMBER m_text NOTIFY textChanged)
QString m_text;
signals:
void textChanged();
// that's all you need
这将是有很多字符串显著的开销,每个继承QObject
,为latter is rather big。但是,您可以将很多字符串实现为单个对象的属性,而且几乎没有开销。
如果您只想监视字符串以进行更改,那么属性就是您所需要的。一个包含QString
的包装只有在需要高级功能时才是合理的,不仅如此,通知不仅字符串已更改,而且它如何更改,是否被清除,是否替换了某个特定字符,是否已插入另一个字符串和哪里。有点你得到一个数据模型。
+0
谢谢,这似乎确实是要走的路。 –
1
一个简单的解决办法是像这样的东西定义自己的等级:
class ObservableString : public QObject
{
Q_OBJECT
public:
void setValue(const QString &value) {
m_string = value;
emit valueChanged(value);
}
QString value() const {
return m_string;
}
signals:
void valueChanged(QString value);
private:
QString m_string;
};
相关问题
- 1. 观察者python中的可观察类
- 2. 基于可观察性,从可观察对象中选择可观察对象
- 3. 观察员可以观察多个可观察物吗?
- 4. 观察AngularJS的可观察性
- 5. Java观察者和可观察的
- 6. knockoutjs - 可观察到的可观察值的对象的observableArray
- 7. 过滤器可观察到的由可观察到的
- 8. 无限可观察到的HashMap作为可观察的
- 9. 当观察者的观察者的寿命长于可观察到的
- 10. Qt数组QString
- 11. Qt Creator和Qstring
- 12. 创建可观察的并获得观察者在RXJS 5.0中
- 13. QT的QString从QDataStream
- 14. KnockoutJS可观察对象的可观察对象
- 15. knockoutjs可观察对象的可观察数组绑定
- 16. RXAndroid:可观察等待另一个可观察的完成
- 17. 可观察 - 将2个承诺转换为可观察到的
- 18. 一个可观察事件的多个可观察事件
- 19. MobX - 将参数传递为可观察的可变观察值?
- 20. 使可观察阵列的所有项目可观察
- 21. Angular2:Return Promise中可观察
- 22. 在热可观察
- 23. 可观察混乱
- 24. 复合可观察
- 25. 可观察ZoneAvarePromise Angular2
- 26. RxJs可观察vs
- 27. 使用可观察
- 28. 可观察到流
- 29. 装饰可观察
- 30. 可观察速记
QString不处理信号,因为它是一个数据容器,可能一个可能的解决方案是添加一个创建一个从QString继承并实现信号的类。 – eyllanesc
你不能在任何类更改字符串时处理该问题吗? – drescherjm