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