【发布时间】:2012-06-25 18:23:56
【问题描述】:
我用 C++ / QT 编写了一个应用程序,它与设备通信以读取/写入其变量,将它们放入/获取到结构中并在 gui 中呈现它们用于查看/编辑目的。
1) 该设备附带一个示例 c 代码,该代码还定义了通信协议(以非常糟糕的方式),例如:
#define VALUE_1 0x12345678
#define VALUE_2 0xDEADBEEF
#define MY_DEVICE_VAR (VALUE_1 << 4) & (VALUE_2 >> 6)
#define MY_DEVICE_VAR_1 (MY_DEVICE_VAR & (VALUE_1 << 2)
#define MY_DEVICE_VAR_2 (MY_DEVICE_VAR & (VALUE_2 << 4)
#define MY_DEVICE_VAR_2 (MY_DEVICE_VAR & (VALUE_2 << 4)
// .. and 300 more lines like above
所以变量VAR_1 表示为:MY_DEVICE_VAR_1。
2) 我有一个包含设备所有变量的结构:
struct MyDeviceData
{
int var1;
double var2;
char var3;
bool var4;
.
.
};
它基本上是从设备读取的数据的存储/投影。 POD 变量有 4 种不同类型。
3) 最后我的 gui 有 gui 元素来显示和编辑 MyDeviceData 的实例
class MyGuI
{
QLineEdit var1;
QLineEdit var2;
QComboBox var3;
QCheckBox var4;
.
.
};
现在我的问题是:
1) 我正在映射 MY_DEVICE_VAR1 -> MyDeviceData::var1 -> MyGUI::var1 与 if 和 switch/case 声明,我对此并不感到自豪。进行映射的更好的“程序化”方式是什么?
2) 当 gui 元素的值发生变化时,我想仅将更新后的值发送到卡片。除了覆盖“textChanged、selectedIndexChanged”等事件的处理函数之外,还有什么“更智能”的方法吗? (QSignalMapper?)
3) 在这种项目中,是否可以概括整个苦力工作? (代码生成器工具?模板?)
【问题讨论】:
标签: c++ qt user-interface serialization