我是Qt的新手 . 我被困在这件事上了 . 我的应用程序中有很多lineEdits,其中的值可能会在应用程序运行时随时更改 . lineEdits中的值只是整数 . 在某些阶段,我需要检查lineEdits中的值并与整数数组进行比较 . 如果它们相等,则完成用户的任务 .
在这里,我想将lineEdits的所有值存储到整数数组,以便我可以运行 for
循环来检查两个数组是否相等而不是为每个 lineEdit
制作 if
条件 . 每当用户更改lineEdit中的值时,数组中的值都应更新,并且当数组中的相应值更改时,lineEdit中的值也应更改 .
我尝试了一个qvector,将lineEdits的值附加到其中 . 此向量现在具有lineEdits的值,但在向量中更改其对应值时不会更新值 .
任何人都可以帮忙,如何做到这一点?
3 回答
你可以有一个指向
QLineEdit
的指针列表作为类成员:并在实例化时将指针添加到列表中:
然后
QSignalMapper
用于在更新行编辑时更新值数组 .QSignalMapper
class收集一组无参数信号,并使用与发送信号的对象相对应的整数,字符串或窗口小部件参数重新发出它们 . 所以你可以有一个像:对于每个行编辑,您可以将
textChanged()
信号连接到QSignalMapper
的map()
插槽,并使用setMapping
添加映射,以便在从行编辑发出textChanged()
信号时,会发出信号mapped(int)
:这样,无论何时更改行编辑,都会发出映射器的
mapped(int)
信号,其中包含行编辑的索引作为参数 .可以在
OntextChanged
插槽中更新数组的值,如:我建议使用QDataWidgetMapper,因为它会使用模型/视图设计模式,它有几个优点 . 下面的示例清楚地显示了所有QLineEdit中的数据可以很容易地进行汇总 . 该示例包含两个文件main.cpp和mainwin.h:
mainwin.h:
main.cpp:
每次
QLineEdit
中的任何一个更改时,都会显示所有QLineEdit
中值的新摘要,请参见下文 .Qt是关于信号和插槽的 . 在您的情况下,您需要将
lineEdit
的文本编辑信号连接到要修改的变量 . 在你拥有lineEdit
的对话框中,你应该在构造函数中有一个连接,例如:这会将
lineEdit
的textEdited
信号连接到YourDialog
的插槽,我也将此命名为textEdited
.这个插槽应该采用一个
const QString&
的单个参数,因为这是QLineEdit::textEdited
根据Qt的文档发出的 .然后,您可以在此插槽函数中执行任何操作,例如将输入转换为带有
lineEdit->text().toInt()
的int
并将其值分配给数组元素等 .此外,如果您确定唯一的条目应该是
int
到此lineEdit
,则在构造函数中,您可以使用带有lineEdit->setValidator
的QIntValidator
对象来确保用户将lineEdit
值编辑为您指定的范围内的有效整数 .