c++ - 通过迭代器使用连接、信号和槽

标签 c++ qt user-interface iterator signals-slots

我正在尝试构建一个 GUI,其中包含许多要连接到一个插槽的按钮。因此,我想将它们添加到一个 vector 中,然后通过迭代器连接所有这些。

例子:

std::vector<QRadioButton*> buttonVec;
buttonVec.push_back(ui->radioA);
buttonVec.push_back(ui->radioB);
buttonVec.push_back(ui->radioC);
//...
for(std::vector<QRadioButton*>::iterator it = buttonVec.begin(); it != buttonVec.end(), it++)
    connect(*it, SIGNAL(released()), this, SLOT(handleRadioVec()));
//...

不幸的是,这会在运行时(不是构建)导致错误,其中相同的连接代码行但带有直接对象的运行没有任何问题:

QObject::connect: Cannot connect (null)::released() to MainWindow::handleRadioVec()

谁知道为什么?

最佳答案

您正在使用 ui,我认为这意味着您的小部件是使用 UIC 编译器设置的。请记住,您必须先实际创建小部件(通过调用 setupUi),然后才能使用它们。在那之前,ui->anything 都将是空指针。

因此在填充 buttonVec 之前调用 setupUi(this)

关于c++ - 通过迭代器使用连接、信号和槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33342610/

相关文章:

c++ - 在 C++ 中分配多维数组,部分可变长度

python - 下拉菜单在 Kivy (Python) 中部分可见

java - 用于停止和反转对象的按钮监听器 (GUI)

c++ - 如何检测按下屏幕的压力?

c++ - 从 QTableWidget 序列化时 CSV 文件中不需要的字符

c++ - 如何更改 QMenu 中操作的图标大小?

java - 检测 JSpinner 何时达到最大限制?

c++ - 图像旋转,伪造图像直方图

c++ - 返回指针的地址

c++ - 如何为 main.cpp 中的泛型类重载 operator>