2013-11-28 68 views
0

这个想法是将QWidget与一个变量连接起来,这样当一个小部件上的文本发生变化时,它也会在变量中发生变化。将QWidget映射到变量

而且这样做只有一个这样的

WidgetMapper::connect(ui->lineEdit, SIGNAL(textChanged(QString)), someClass.var); 

线,将例如QLineEdit具有可变连接。

1)这将在lineEdit

2)当lineEdit触发一个textChanged(QString)信号显示var - WidgetMapper将其转换的QString校正映射类型与字符串流,并将其写入var

但我真的不知道模板,以及不知道是否有可能。 我不认为每种类型都可以使用一个WidgetMapper,所以我也尝试为每种类型创建不同的实例(WidgetMapper<int> mapper;),然后为每个QLiteEdit编写setter和onTextChangedSlots,但仍然无法弄清楚如何制作它也可以工作(转换器部分仍然无法找出正确的类型)。

WidgetMapper使用QSignalMapper到信号映射到QWidget的,它工作得很好,我有麻烦的一部分 - 被转换的QString到模板变量中。

那么有可能吗?如果是的话,我怎么能这样做?或者也许已经有解决这个问题的办法了? (以某种方式使用QDataWidgetMapper与包含变量的类可能?)

+0

为什么不使用'QLineEdit :: value()'并在需要时转换返回的值? –

+0

@RomhaKorev,因为它们有很多,并且在编辑之后变更应该在变量中更改值。所以我想避免写每个QLineEdit onTextChanged插槽将其文本()转换为变量 – Stals

回答

2

首先,连接变量除了调用某个函数之外什么也不做,如果它是possigle。

第二次尝试使用QSignalMapper,通过这种方式,您可以为所有小部件使用单个插槽,因为您可以将其指针保持在数组中,其索引是由SignalMapper发出的信号(int)。这样您的插槽可以使用MyWidgetArray[i]->text()

+0

,但我怎么记得哪个Widget是哪个变量? – Stals

+0

看看QSignalMapper。您可以为不同的小部件发出int信号。只需创建两个包含小部件和变量的数组,然后使用:'MyVarArray [i] = MyWidgetArray.at [i] - > text();''其中我只是QSignalMapper发出的int(这是我首选的方式在一个插槽中管理大量相同类型的wigets) –

相关问题