通过迭代器使用connect、signals和slots
Use connect, signals and slots by iterator
我试图建立一个GUI与很多按钮连接到一个插槽。因此,我想将它们添加到一个向量中,然后通过迭代器将它们连接起来。
的例子:
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主窗口::handleRadioVec ()
有人知道为什么吗?
您使用的是ui
,我认为这意味着您的小部件是使用UIC编译器设置的。请记住,在使用小部件之前,您必须实际创建这些小部件(通过调用setupUi
)。在此之前,ui->anything
将是空指针。
所以在填充buttonVec
之前调用setupUi(this)
不是答案,而是提示。如果你使用c++ 11,你可以写出更清晰(和更快)的代码:
const auto buttons =
{
ui->radioA,
ui->radioB,
// ...
};
for ( auto btn : buttons )
connect( btn, &QPushButton::clicked, this, &MainWindow::handleRadioVec );
相关文章:
- 如何使用 signals.boostv2 调用特定插槽
- 如何让用户在数组中添加和删除"slots"?
- Qt Signals&Slots:如何获取已更改的数据?
- std::getline and posix signals
- QT QNetworkAccessManager and Signals
- 对qt中的signal和slots使用另一个类对象
- c++ 类访问关键字"signals"是什么意思?
- 使用 Visual Studio 从库中"Signals"
- Qt Slots and C++11 lambda
- Qt #define "signals" 与GStreamer(GStreamer)发生冲突
- Qt connect() without QObject or slots
- LeapMotion, Qt and signals
- 通过迭代器使用connect、signals和slots
- c++ boost signals 2
- OpenSSL and signals
- Boost signals.hpp在Visual Studio 2010上导致几个编译时错误