Qt: qobject_cast<QPushButton*>(sender()) 简化信号与槽的编写
2017-04-20 21:55
471 查看
原文地址:http://blog.csdn.net/rl529014/article/details/52144009
当你觉得写代码是一件重复性极高的工作时,这时你就应该考虑换个方式来实现了。
提高代码效率,减少代码量。
plain copy
print?
void Widget::onClicked()
{
QPushButton* button = qobject_cast<QPushButton*>(sender());
QRadioButton* radio = qobject_cast<QRadioButton*>(sender());
if (button)
{
QString text = button->text();
ui->label_2->setText(text);
}
else if(radio)
{
QString text = radio->text();
ui->label_2->setText(text);
}
}
plain copy
print?
private slots:
void onClicked();
plain copy
print?
connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(onClicked()));
connect(ui->pushButton_2,SIGNAL(clicked(bool)),this,SLOT(onClicked()));
connect(ui->pushButton_3,SIGNAL(clicked(bool)),this,SLOT(onClicked()));
connect(ui->pushButton_4,SIGNAL(clicked(bool)),this,SLOT(onClicked()));
connect(ui->radioButton,SIGNAL(clicked(bool)),SLOT(onClicked()));
connect(ui->radioButton_2,SIGNAL(clicked(bool)),SLOT(onClicked()));
connect(ui->radioButton_3,SIGNAL(clicked(bool)),SLOT(onClicked()));
connect(ui->radioButton_4,SIGNAL(clicked(bool)),SLOT(onClicked()));
plain copy
print?
void Widget::onClicked()
{
QPushButton* button = qobject_cast<QPushButton*>(sender());
QRadioButton* radio = qobject_cast<QRadioButton*>(sender());
if (button)
{
QString text = button->text();
ui->label_2->setText(text);
}
else if(radio)
{
QString text = radio->text();
ui->label_2->setText(text);
}
}
当然了,这里我只是举个例子,在实际的应用中大家可以扩展其功能的。
当你觉得写代码是一件重复性极高的工作时,这时你就应该考虑换个方式来实现了。
提高代码效率,减少代码量。
代码片:
[cpp] viewplain copy
print?
void Widget::onClicked()
{
QPushButton* button = qobject_cast<QPushButton*>(sender());
QRadioButton* radio = qobject_cast<QRadioButton*>(sender());
if (button)
{
QString text = button->text();
ui->label_2->setText(text);
}
else if(radio)
{
QString text = radio->text();
ui->label_2->setText(text);
}
}
实例:
1、在Qt creator中拖拽出如下界面:
2、添加槽函数。
[cpp] viewplain copy
print?
private slots:
void onClicked();
3、添加信号与槽的关联。
[cpp] viewplain copy
print?
connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(onClicked()));
connect(ui->pushButton_2,SIGNAL(clicked(bool)),this,SLOT(onClicked()));
connect(ui->pushButton_3,SIGNAL(clicked(bool)),this,SLOT(onClicked()));
connect(ui->pushButton_4,SIGNAL(clicked(bool)),this,SLOT(onClicked()));
connect(ui->radioButton,SIGNAL(clicked(bool)),SLOT(onClicked()));
connect(ui->radioButton_2,SIGNAL(clicked(bool)),SLOT(onClicked()));
connect(ui->radioButton_3,SIGNAL(clicked(bool)),SLOT(onClicked()));
connect(ui->radioButton_4,SIGNAL(clicked(bool)),SLOT(onClicked()));
4、实现槽函数。
[cpp] viewplain copy
print?
void Widget::onClicked()
{
QPushButton* button = qobject_cast<QPushButton*>(sender());
QRadioButton* radio = qobject_cast<QRadioButton*>(sender());
if (button)
{
QString text = button->text();
ui->label_2->setText(text);
}
else if(radio)
{
QString text = radio->text();
ui->label_2->setText(text);
}
}
5、运行截图:
当然了,这里我只是举个例子,在实际的应用中大家可以扩展其功能的。
相关文章推荐
- Qt: qobject_cast<QPushButton*>(sender()) 简化信号与槽的编写
- qobject_cast<QPushButton*>(sender()) 简化信号与槽的编写(sender()取得发信号的对象后,就取得了它的全部信息,为所欲为)
- Qt信号与槽之查看信号来源qobject_cast<类型*>(sender())
- Qt5—qobject_cast<QAction *>(sender())应用 [2013-11-19整理]
- QT5编程提示QObject::connect: No such slot QPushButton::renameButton()
- <Qt>重载信号的信号槽处理
- 蛇舞2013抽奖程序的编写和QT技巧问题梳理总结<QT>
- Qt error ------ no matching function for call to QObject::connect(QSpinBox*&, <unresolved overloaded function type>, QSlider*&, void (QAbstractSlider::*)(int))
- Qt: 内建对话框(各种对话框都有了,且用到了qobject_cast解析sender的技术)
- QT核心机制分析1——信号与槽<一>
- 自学QT之static_cast<int>
- 自学QT之static_cast<int>
- PYQT5+python3.6+QT编写一个带ui的加密解密小程序<凯撒加密><维吉尼亚加密><仿射加密><培根加密>
- QT 设置QPushButton 颜色
- 解读QT信号与槽机制里 QMetaObject::connectSlotsByName(QObject *o)的源码
- Qt 之 qobject_cast 分析及QTBUG 20616
- C#编写的<植物大战僵尸>作弊器源码【转】
- QT源码分析: qobject_cast
- 【技术讨论】从弹弹堂说起,如何用2D物理引擎编写一个游戏<一>
- 自己编写的泛型List<T>功能代码 欢迎高手指点