将内存数据PTR映射到qt输入字段
mapping memory data ptr to qt input field
如何将内存数据ptr"链接"到qt输入字段?
如果内存发生变化,则动态刷新数据视图。如果输入已经完成,内存数据将被覆盖。
我有这个功能在fox gui工具包(fxdatattarget类)。我需要相同的/类似的东西在qt。
我不是说这是最好的解决方案,但一种可能的方法如下:
- 继承
Qobject
作为指针的包装器。 - 实现valueChanged和setValue信号和插槽,并让它们接受qstring
- 实现一个成员
detectChange()
来检测更改(如果数组不是太大,存储数组的完整副本以进行检查)。如果检测到变化,让ValueChanged
信号升高) - 设置
QTimer
周期性呼叫detectChange()
。 - 将对象的
valueChanged
信号连接到文本框的setValue
插槽,反之亦然。
最后,代码看起来像这个例子,这里的代码只针对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 &)));
// ....
}
相关文章:
- 如何在Qt 4.8中阻止/忽略/丢弃早于特定超时的用户输入事件
- Qt,操作缓慢时不要冻结GUI输入元素
- 使用 qt 或 c++ 从桌面获取输入和输出
- 如何在QT中为QInputDialog输入密码时设置背景非活动和灰色?
- Qt读取串行输入,然后将其拆分为单独的变量
- Qt 自动 UI 测试因消息框而停止.如何在消息框中模拟输入?
- QString变量在使用QT Creator从键盘输入的双变量后跳过
- 处理自定义QT小部件中的输入事件
- 在Qt中如何为用户创建GUI以输入nxn矩阵
- 其他语言的Qt键盘输入
- 检查leandit输入是否具有正确的格式QT 5 C
- 尝试使用对象作为输入来绘制QT创建者
- 我的代码怎么了?带有QT的原始输入API
- QComboBox 作为 QT 中的函数输入参数
- Qt- 设置来自表视图的输入的验证器
- Qt c++如何输入值
- 存储线路编辑到字符串QT的输入
- qt检查文件中是否存在文件,如果它没有提示用户输入其位置,则将文件复制到程序工作目录
- 检查QT输入的输入
- 将内存数据PTR映射到qt输入字段