我需要一个帮助我的方法,在循环中各自到达名为"comboBox1","comboBox2"等变量.我想改变代码:
//proceed comboBox1 //proceed comboBox2 //proceed comboBox3 //proceed comboBox4 //proceed comboBox5 //proceed comboBox6
成:
for (int i = 1; i < numberOfBoxes; i++) { //proceed comboBox(i) }
我试图找到像'eval'这样的东西,但谷歌没有给出任何匹配的东西.我也尝试使用运算符##预处理名称,但似乎没有办法将当前整数值放到宏中.
最简单的解决方案是将它们全部放在一个数组中并使用迭代器:
// I've made up a type, but you get the idea. std::vectorcombos; combos.insert(comboBox1); combos.insert(comboBox2); combos.insert(comboBox3); combos.insert(comboBox4); combos.insert(comboBox5); combos.insert(comboBox6);
现在你可以迭代组合了.主要问题是c ++没有反射.因此,您无法在运行时生成字符串,并且可以像其他语言一样获取对象或函数的地址.
编辑:我刚看到你正在使用Qt.在这种情况下,您应该使用:
QListqFindChildren ( const QObject * obj, const QString & name );
要么
QListqFindChildren ( const QObject * obj, const QRegExp & regExp);
这使您可以根据运行时生成的名称获取列表.例如:
QListcombos = qFindChildren(ui, QRegExp("combo[0-9]+"));
然后你就可以迭代了!