【QT】QT信号槽初实现

运行成功后的界面

用qt designer随便做了个界面,然后放上VS2010去。界面成功运行了,但是按钮事件一直失败,点击毫无反应。Debug了一下发现QObject::connect(pushButton,SIGNAL(clicked()),this,SLOT(add()));的返回值是false。但是QObject::connect(pushButton,SIGNAL(clicked()),this,SLOT(reject()));却是可以将窗口关掉的。然后就折腾了一上午没成功........

失败的代码

namespace Ui {
    class Calculate: public Ui_Dialog,public QDialog {
	public:
		Calculate(QWidget *parent = 0):QDialog(parent){
			setupUi(this);
			QObject::connect(pushButton,SIGNAL(clicked()),this,SLOT(add()));
		}
	private slots:
		void add(){
			lcdNumber->display(lcdNumber->value()+1);
		}
		void minus(){
			lcdNumber->display(lcdNumber->value()-1);
		}
		void multiply(){
			lcdNumber->display(lcdNumber->value()*2);
		}
	};
} // namespace Ui
然后乱玩半天,成功的代码如下:

namespace Ui {
    class Calculate: public QDialog,public Ui_Dialog {
			Q_OBJECT
	public:
		Calculate(QWidget *parent = 0):QDialog(parent){
			setupUi(this);
			QObject::connect(pushButton,SIGNAL(clicked()),this,SLOT(add()));
			QObject::connect(pushButton_2,SIGNAL(clicked()),this,SLOT(minus()));
			QObject::connect(pushButton_3,SIGNAL(clicked()),this,SLOT(multiply()));
		}
	private slots:
		void add(){
			lcdNumber->display(lcdNumber->value()+1);
		}
		void minus(){
			lcdNumber->display(lcdNumber->value()-1);
		}
		void multiply(){
			lcdNumber->display(lcdNumber->value()*2);
		}
	};
} // namespace Ui
做出的修改有:

1、把public Ui_Dialog和public QDialog调换位置。

2、加入Q_OBJECT生成moc_ui_calculate.cpp文件。

第1步没有的话会出现undeclared identifier(未定义变量)的错误。

第2个会导致SLOT槽没有写入文件导致信号无法发送到这个槽上。
该程序源码地址:http://download.csdn.net/detail/u013580497/9123951

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值