我们的想法是将QWidget与变量连接起来,这样当小部件上的文本发生变化时,它也会在变量中被更改。
用这样的一行来做这个
WidgetMapper::connect(ui->lineEdit, SIGNAL(textChanged(QString)), someClass.var);
将例如QLineEdit
与变量连接起来。
1)这会在lineEdit
中显示var
2)当lineEdit触发textChanged(QString)
信号时 - WidgetMapper会使用stringstream将此QString转换为正确的映射类型,并将其写入var
。
但是我真的不太了解模板,也不知道它是否可行。
我不认为可以为每种类型使用一个WidgetMapper,所以我也尝试为每种类型(WidgetMapper<int> mapper;
)创建单独的实例,这仍然可以为每个QLiteEdit编写setter和onTextChangedSlots但我无法弄清楚如何让它工作(转换器部分仍然无法找出正确的类型)。
WidgetMapper使用QSignalMapper将信号映射到QWidget,它运行正常,我遇到麻烦的部分 - 将QString转换为模板变量。
有可能吗?如果是的话,我怎么能这样做?或者也许已经有解决这个问题的方法了? (以某种方式将QDataWidgetMapper
与包含变量的类一起使用?)
答案 0 :(得分:2)
首先,如果可能的话,连接变量除了调用某个函数之外别无其他。
第二次尝试使用QSignalMapper
,这样你就可以为所有小部件使用一个插槽,因为你将它们的指针放在一个数组中,索引是SignalMapper发出的信号(int)。这样您的广告位就可以使用MyWidgetArray[i]->text()
。