QT:有序排放多个按钮并处理它们的信号
2012-01-05 21:05
323 查看
像QQ的好友列表那样排列多个按钮是一项很不错的技术,使用QToolBox可以简单地实现这个需求,而运用QT的QSignalMapper类又可以方便地处理大量由不同控件发出的信号,以下是基于这两技术的一个小例子。
思路:
1:创建多个按钮(或其他控件),并将它们放到一个group里去。
2:将按钮的clicked信号连接到signalmapper中去,并设置它们的“信号转换规则。
3:连接signalmapper的mapped信号与最终要调用的糟(ClickedButton)。
程序截图:
源代码:
思路:
1:创建多个按钮(或其他控件),并将它们放到一个group里去。
2:将按钮的clicked信号连接到signalmapper中去,并设置它们的“信号转换规则。
3:连接signalmapper的mapped信号与最终要调用的糟(ClickedButton)。
程序截图:
源代码:
#include <QtGui> #include <QtCore> const int NUMBER = 100; class ButtonsBox : public QToolBox { Q_OBJECT private: QPushButton *button[NUMBER]; QSignalMapper *signalMapper; public: ButtonsBox(QWidget *parent = 0); public slots: void ClickedButton(const QString &text); }; ButtonsBox::ButtonsBox(QWidget *parent /* = 0 */) : QToolBox(parent) { signalMapper = new QSignalMapper(this); QGroupBox *groupBox = new QGroupBox; QVBoxLayout *subLayout = new QVBoxLayout(groupBox); //处理最终信号的槽 connect(signalMapper, SIGNAL(mapped(const QString&)), this, SLOT(ClickedButton(const QString&))); for(int i=0; i<NUMBER; i++) { QString text = QString::number(i); button[i] = new QPushButton(this); button[i]->setText( text ); subLayout->addWidget(button[i]); //原始信号传递给signalmapper connect(button[i], SIGNAL(clicked()), signalMapper, SLOT(map())); //设置signalmapper的转发规则, 转发为参数为QString类型的信号, 并把text的内容作为参数传递。 signalMapper->setMapping(button[i], text); } addItem(groupBox, "All Buttons"); } void ButtonsBox::ClickedButton(const QString &text) { QMessageBox::information(this, "OK", text); } #include "main.moc" int main(int argc, char **argv) { QApplication app(argc, argv); ButtonsBox *toolBox = new ButtonsBox; toolBox->show(); return app.exec(); }
相关文章推荐
- QT 巧用QSignalMapper分类有序地处理大量信号
- QT 巧用QSignalMapper分类有序地处理大量信号
- QT 巧用QSignalMapper分类有序地处理大量信号
- QT用信号和处理机制为事件添加处理动作(点击按钮显示helloworld)
- 巧用QSignalMapper分类有序地处理大量信号(含源码)
- QT事件处理(以按钮为例子)
- 巧用QSignalMapper分类有序地处理大量信号(含源码)
- 巧用QSignalMapper分类有序地处理大量信号
- QT 学习中遇到的问题~~~~常见的信号处理机制(on_browseButton_clicked()) (toLower) (separator()) (setText)
- 关于Qt 信号与槽自动连接 qPushbutton按钮无法点击的问题
- 有关qt的信号槽错误的处理方法
- 巧用QSignalMapper分类有序地处理大量信号
- Qt 4000 信号与槽 输出按钮被单击次数
- 巧用QSignalMapper分类有序地处理大量信号
- 同时创建多个线程,它们都访问一个对象中的同步方法,怎么确保第一个线程最先拿到对象锁,否则,怎么保证多个线程之间的有序通信
- 在非UI线程中更改UI(Delphi使用隐藏窗口来处理,QT使用信号槽)
- 用QT信号和槽实现主界面有两个按钮,一个按钮打开新界面,另一个关闭新界面
- 按钮事件弹出多个AlertDialog,如何处理?
- C++-Qt按钮事件(信号和槽机制)
- Qt线程在sleep时能否处理信号