Qt on_pushButton_clicked()的用法

在Qt里按钮控件默认对应一个on_pushButton_clicked()成员,如果想用点击信号,在代码中实现on_pushButton_clicked()成员即可。


 


最近看了一段代码,里面并没有connect函数,只定义了pushbutton,也没有看到调用on_pushButton_clicked()的语句,那么难道说只要点了button,就会自动调用on_pushButton_clicked()的内容吗?


这种写法是QtCreator默认的,也就是它背后帮你完成了connect。 
比如对象obj有信号A,你只需要在同一个类中完成如下形式的函数即可 
on_obj_a()。 
编译时QtCreator就会自动在背后处理,效果就是对象obj的信号a被连接到这个函数。 
推荐还是不这样做,这样做影响阅读。等多起来时自己也看不明白。也许不应该说是QtCreator的帮助,应该是moc的帮助恰当点。


Qt Meta Object Compiler会读取*.h文件 生成 moc_*.cpp文件,你说的没有看到调用on_pushButton_clicked()的语句,


是因为调用此语句的方法刚好就存在于上面的moc_*.cpp文件里,qmake生成的makefile里会指定源代码:


 




***************************************Makefile******************* 
SOURCES = *.cpp 
main.cpp moc_*.cpp 
******************************************************************




moc_*cpp文件与*.cpp文件在同一目录下。


 


那种格式的不需要专门去connect, 
用的是另外一个函数,在ui_mainwindow.h这个文件中, 
名字叫connectSlotsByName 
详细说明:




void QMetaObject::connectSlotsByName ( QObject * object ) [static] 
Searches recursively for all child objects of the given object, and connects matching signals from them to slots of object that follow the following form: 
void on_<object name>_<signal name>(<signal parameters>); 
Let's assume our object has a child object of type QPushButton with the object name button1. The slot to catch the button's clicked() signal would be: 
void on_button1_clicked(); 
QMetaObject::connectSlotsByName(MainWindow);


 


另外需要说明的是如果在此基础上再加入手动的connect的话将会响应两按钮的点击效果,或是直接不应该。


Qt的增加信号与槽之间的连接方法有:手动编写conncet代码和Ui连接


Qt的对像之间通信中信号和槽比较常用,其它的通信方法还有postEvent


 


所以用法是:


1、在UI文件里加入按钮,objectName 设置为pushButtonA


2、在引用的头文件(比如MainWindow.h)里加入按钮曹的声明:


public slots:
    void on_pushButtonConnect_clicked();
3、在调用处使用,(比如MainWindow.cpp)。


void MainWindow::on_pushButtonConnect_clicked()
{
    qDebug("pushButtonConnect");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunxiaopengsun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值