【问题标题】:mapping memory data ptr to qt input field将内存数据 ptr 映射到 qt 输入字段
【发布时间】:2016-09-06 12:56:50
【问题描述】:

如何将内存数据 ptr “链接”到 qt 输入字段?

如果内存发生变化,数据视图会动态刷新。 如果输入完成,内存数据将被覆盖。

我在 fox gui 工具包(FXDataTarget 类)中有这个功能。 我会在 qt 中需要相同/相似的东西。

【问题讨论】:

  • 你能分享一些你在做什么的代码吗?

标签: c++ qt memory data-binding mapping


【解决方案1】:

我并不是说这是最好的解决方案,但可能的方法如下:

  • 继承 Qobject 作为指针的包装器。
  • 实现 valueChanged 和 setValue 信号和槽,让它们接受 Qstrings。
  • 实现一个成员detectChange() 来检测更改(如果数组不是太大,请存储数组的完整副本以再次检查)。如果检测到变化,让它引发ValueChanged 信号)
  • 设置QTimer 定期调用detectChange()
  • 将对象的valueChanged 信号连接到文本框的setValue 插槽,反之亦然。

【讨论】:

    【解决方案2】:

    最后,代码看起来像这个例子,这里只为一个 int * ptr 编码。

    class Updater : public QObject
        {
          Q_OBJECT
    public:
        Updater(int *);
        QTimer *timer;
        int myData_mem;
        int *mydata;
    public slots:
        void setText(const QString &value);
        void detectChange();
    signals:
        void hasChanged(const QString &value);
     };
    
    
    Updater::Updater(int *mydata_) : QObject()
    {
     timer = new QTimer(this);
     connect(timer, SIGNAL(timeout()), this, SLOT(detectChange()));
     timer->start(500);
     mydata = mydata_;
     myData_mem = mydata_;
    }
    
    void Updater::detectChange()
    {
        if (*mydata != myData_mem)
        {
        myData_mem = *mydata;
        emit hasChanged(QString::number(myData_mem));
       }
    }
    
    void Updater::setText(const QString &value)
    {
    myData_mem = value.toInt();
    *mydata = myData_mem;
    }
    
    int shared_data;
    
    int main(int argc, char *argv[]) {
    // your main qt code goes here
    
    // ....
    
    // and updater setup ,now :
    QLineEdit *editor = new QLineEdit("0");
    
    Updater updater(&shared_data);
    
    QObject::connect(editor, SIGNAL(textChanged(const QString &)),
                         &updater, SLOT(setText(const QString &)));
    
    QObject::connect(&updater, SIGNAL(hasChanged(const QString &)),
                     editor, SLOT(setText(const QString &)));
    // ....
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-10
      • 2021-01-26
      • 1970-01-01
      • 2018-03-24
      • 2019-07-29
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多