Qt 中可观察的 QString

Observable QString in Qt

我希望只要特定 QString 的值发生变化,我的 Qt 应用程序就会发生变化。我没有在 QString 文档中找到任何对信号的引用,所以我需要子类化 QString 并实现我自己的信号还是有首选的替代方案?

一个简单的解决方案是定义您自己的 class,如下所示:

class ObservableString : public QObject
{
    Q_OBJECT
    Q_DISABLE_COPY(ObservableString)

public:
    void setValue(const QString &value) {
      
        if (m_string != value) {
            m_string = value;
            emit valueChanged(value);
        }
    }

    QString value() const {
        return m_string;
    }

signals:
    void valueChanged(QString value);

private:
    QString m_string;
};

您没有找到任何对信号的引用,因为这不是您在 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 周围的包装器仅在您需要高级功能时才合理,不仅通知字符串已更改,还通知它如何更改、是否已清除、是否替换了特定字符、是否删除了一部分或被删除那里插入了另一个字符串和位置。有点像你得到的数据模型。