QT之中多个信号连接同一个槽【细说版】
2016-03-23 17:20
351 查看
qt的开发中有时候需要将多个信号连接到一个槽函数中,那么这些信号怎么才能找到槽函数中自己的如意郎君?
其实,有很多例子都是简单将sender()指针强行转化成信号发送者类型,然后判断其是否存在,如果存在那么强
行转化成这个类的指针,就可在在槽函数里面被认定下来。在比如这么一个环境下:一个button,一个Qtimer都指向
一个槽函数时候,我们分别将sender()指针强行转化成QPushButton和QTimer类型,只要其存在,在槽函数里面
分类写是可以的。但是问题是,比如有多个PushButton了?好吧?说了这么多,直接上代码!!!
上面直接按照sender()指针与信号来源做对比,就可以很好区分。
另外,一般情况下,一个指针要么是空,要么非空,而我们这里可以直接来个if(
)其实看文档会知道,sender()指针要么存在非空,要么不存在那就被置为0的。
其实,有很多例子都是简单将sender()指针强行转化成信号发送者类型,然后判断其是否存在,如果存在那么强
行转化成这个类的指针,就可在在槽函数里面被认定下来。在比如这么一个环境下:一个button,一个Qtimer都指向
一个槽函数时候,我们分别将sender()指针强行转化成QPushButton和QTimer类型,只要其存在,在槽函数里面
分类写是可以的。但是问题是,比如有多个PushButton了?好吧?说了这么多,直接上代码!!!
void Dialog::movieSlot()
{
QObject* sender = QObject::sender();//对于继承类的情况,因为派生类按继承规则也是一个基类,所以将派生类隐式转换成基类
if(sender == this->timer)
{
qDebug()<<sender;
autoMovie = new QMovie("./images/play1.gif");
ui->viewLabel->setMovie(autoMovie);
qDebug()<<"MovieActivity"<<autoMovie->isValid();
autoMovie->start();
timer->stop();
}
if(sender == ui->playBtn)//比较符号的两边不管是C还是C++中都是先将两边隐式转换成同一类型(这种类型叫公共类型)后再比较
{
qDebug()<<sender;
if(timer->isActive())
{
timer->stop();
}
movie = new QMovie("./images/play.gif");
ui->viewLabel->setMovie(movie);
qDebug()<<"MovieActivity"<<movie->isValid();
movie->start();
}
if(sender == ui->playBtn2)
{
qDebug()<<sender;
if(timer->isActive())
{
timer->stop();
}
movie = new QMovie("./images/play2.gif");
ui->viewLabel->setMovie(movie);
qDebug()<<"MovieActivity"<<movie->isValid();
movie->start();
}
}
上面直接按照sender()指针与信号来源做对比,就可以很好区分。
另外,一般情况下,一个指针要么是空,要么非空,而我们这里可以直接来个if(
dynamic_cast<QTimer*>(sender())
)其实看文档会知道,sender()指针要么存在非空,要么不存在那就被置为0的。
相关文章推荐
- Qt构建OpenCV3.1CMake报错Failed to download opencv_ffmpeg.dll
- 怎样用QT在windows环境通过编程卸载installShield打包的程序
- QTimer调用Stop后再次start,以前connect的槽将失效
- Qt教程 第二章:调用退出
- Qt教程 第一章:Hello, World!
- Qt4.8.6移植到海思HI3536
- Qt 不能响应Tslib输入的问题
- 在Beaglebone Black板上使用Yocto移植Qt5
- QT下的几种透明效果
- Qt中的.qrc文件
- Qt简介
- Qt类图
- Qt布局
- Qt新建项目
- QT 模拟点击网页
- QT更改程序图标
- Qt中提高sqlite的读写速度(使用事务一次性写入100万条数据)
- Qt 图像类 QImage QPixmap QBitmap QPicture 之区别与用途
- Qt调用zlib库文件解压缩zip文件
- windows 环境下Qt Creator 的debugger模式配置