当你觉得写代码是一件重复性极高的工作时,这时你就应该考虑换个方式来实现了。

提高代码效率,减少代码量。

代码片:

  1. void Widget::onClicked()
  2. {
  3. QPushButton* button = qobject_cast<QPushButton*>(sender());
  4. QRadioButton* radio = qobject_cast<QRadioButton*>(sender());
  5. if (button)
  6. {
  7. QString text = button->text();
  8. ui->label_2->setText(text);
  9. }
  10. else if(radio)
  11. {
  12. QString text = radio->text();
  13. ui->label_2->setText(text);
  14. }
  15. }

实例:

1、在Qt creator中拖拽出如下界面:

2、添加槽函数。

  1. private slots:
  2. void onClicked();

3、添加信号与槽的关联。

  1. connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(onClicked()));
  2. connect(ui->pushButton_2,SIGNAL(clicked(bool)),this,SLOT(onClicked()));
  3. connect(ui->pushButton_3,SIGNAL(clicked(bool)),this,SLOT(onClicked()));
  4. connect(ui->pushButton_4,SIGNAL(clicked(bool)),this,SLOT(onClicked()));
  5. connect(ui->radioButton,SIGNAL(clicked(bool)),SLOT(onClicked()));
  6. connect(ui->radioButton_2,SIGNAL(clicked(bool)),SLOT(onClicked()));
  7. connect(ui->radioButton_3,SIGNAL(clicked(bool)),SLOT(onClicked()));
  8. connect(ui->radioButton_4,SIGNAL(clicked(bool)),SLOT(onClicked()));

4、实现槽函数。

  1. void Widget::onClicked()
  2. {
  3. QPushButton* button = qobject_cast<QPushButton*>(sender());
  4. QRadioButton* radio = qobject_cast<QRadioButton*>(sender());
  5. if (button)
  6. {
  7. QString text = button->text();
  8. ui->label_2->setText(text);
  9. }
  10. else if(radio)
  11. {
  12. QString text = radio->text();
  13. ui->label_2->setText(text);
  14. }
  15. }

5、运行截图:

当然了,这里我只是举个例子,在实际的应用中大家可以扩展其功能的。

http://blog.csdn.net/rl529014/article/details/52144009

Qt: qobject_cast<QPushButton*>(sender()) 简化信号与槽的编写的更多相关文章

  1. qobject_cast<QPushButton*>(sender()) 简化信号与槽的编写(sender()取得发信号的对象后,就取得了它的全部信息,为所欲为)

    当你觉得写代码是一件重复性极高的工作时,这时你就应该考虑换个方式来实现了. 提高代码效率,减少代码量. 代码片: void Widget::onClicked() { QPushButton* but ...

  2. Qt源码分析之信号和槽机制

    Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的说法,简单点说就是如何在一个类的一个 ...

  3. Qt源码分析之信号和槽机制(QMetaObject是一个内部struct)

    Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的说法,简单点说就是如何在一个类的一个 ...

  4. Qt入门(3)——信号和槽

    信号和槽用于对象间的通讯.信号/槽机制是Qt的一个中心特征并且也许是Qt与其它工具包的最不相同的部分.在图形用户界面编程中,我们经常希望一个窗口部件的一个变化被通知给另一个窗口部件.更一般地,我们希望 ...

  5. Qt Quick快速入门之信号、槽

    信号和槽主要用于组件之间的通信,类似于.net和java中的委托. 使用QObject::connect方法将信号与槽关联起来,然后信号的发起者发出信号,接受者中的槽函数就会执行. 比如connect ...

  6. 第15.19节 PyQt(Python+Qt)入门学习:自定义信号与槽连接

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 本文利用中介绍了PyQt中的信号和槽机制,除了使用PyQt组件的已有信号外,PyQt和Qt ...

  7. QT学习日记篇-02-QT信号和槽

    课程大纲: <1>给控件改名字 随着UI界面的控件变多,如果使用系统自带的名称,后期会让人不明觉厉,说白了,就是掌握C++的命名规则:易懂,条例清晰,人性化 方法:直接点击控件,进入右侧对 ...

  8. Qt error ------ qRegisterMetaType() 跨线程信号与槽的形参携带

    Qt提示: QObject::connect: Cannot queue arguments of type 'FrequencySpectrum' (Make sure 'FrequencySpec ...

  9. Qt ------ QWidget 自定义子类使用信号与槽(Q_OBJECT)后 stylesheet 失效

    这个应该属于 Qt 的一个bug,Qt assistant 给出相应的解决办法:重写函数“void paintEvent(QPaintEvent *event);”,添加下面截图中的一段代码

随机推荐

  1. 《java编程思想》--多线程基础--Runnable

    一.简单说下Runnable是什么 1.它是一个接口 2.只提供了run方法 3.这个接口提供了一个协议:实现这个接口的类是active的(不必成为Thread的子类) 4.run方法没有返回值 /* ...

  2. ThinkPHP3.2 加载过程(二)

    回顾: 上次介绍了 ThinkPHP 的 Index.PHP入口文件.但只是TP的入口前面的入口(刷boss总是要过好几关才能让你看到 ,不然boss都没面子啊),从Index.PHP最后一行把我们引 ...

  3. 用Unitils测试BaseDao遇到的问题总结

    <Spring 3.0就这么简单>.(陈雄华,林开雄)第8章,对如何用Unitils进行测试简单介绍,下面是我用Unitils进行单元测试过程中遇到的问题的总结. 1.设置好pom.xml ...

  4. [译]线程生命周期-理解Java中的线程状态

    线程生命周期-理解Java中的线程状态 在多线程编程环境下,理解线程生命周期和线程状态非常重要. 在上一篇教程中,我们已经学习了如何创建java线程:实现Runnable接口或者成为Thread的子类 ...

  5. .net mvc 防止 xss 与 CSRF

    CSRF(Cross-site request forgery跨站请求伪造,也被称成为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站 ...

  6. C++ 容器及选用总结

    目录 ==================================================== 第一章 容器 第二章 Vector和string 第三章 关联容器 第四章 迭代器 第五 ...

  7. DataSet数据导出为Excel文档(每个DataTable为一个Sheet)

    Web项目中,很多时候须要实现将查询的数据集导出为Excel文档的功能,很多时候不希望在工程中添加对Office组件相关的DLL的引用,甚至有时候受到Office不同版本的影响,导致在不同的服务器上部 ...

  8. Sybase 导入导出命令

    BCP命令详解 BCP是SYBASE公司提供专门用于数据库表一级数据备份的工具. 一般存放在所安装的ASE或者Open Client 的BIN目录中. 可执行文件名称为bcp.EXE 参数列表如下:( ...

  9. iOS 进阶 第一天(0323)

    0323 Storyboard连线错误 如下图: 不允许直接修改对象的结构体属性成员,但允许直接整体修改对象的结构体属性 如下图: 打印一个控件对象的frame 如下图: 如果一个控件无论怎么改变它的 ...

  10. java 构造函数

    1.public className(){}. 2.名称与类名相同,无返回值,无返回类型,void也不行.(就是上边的形式,除了可以有参数). 3.有0个或多个参数. 4.每个类都至少有一个const ...