}
对多个信号连接一个槽的区分:
QTimer *tmpTimer = qobject_cast<QTimer *>(sender());
if(tmpTimer==timer1) ///这里的timer1,是第一个定时器的指针
{
qDebug()<<"time1 timeout!";
}
else if(tmpTimer==timer2)//是第二个定时器的指针,
{
qDebug()<<"time2 timeout!";
}
------------------------------------
信号和槽,其实就是一个回调非阻塞的回调函数,当槽函数和信号在同一个线程中,则为直接连接,默认是Qt::DirectConnection 当不在同一个线程信号会发送到队列中去,也就是说槽与信号是异步的过程,可以在connect后加上Qt::DirectConnection来使他直接连接。
验证信号和槽是回调函数的代码如下: (通常情况下 尽量设置信号和槽的返回值为void 参见网页有:http://topic.csdn.net/u/20120528/21/76ab40b6-d7ca-4b85-a0a9-9b37ae29b9d1.html?7095)
#include "widget.h"
#include <QGridLayout>
#include <QPushButton>
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
QGridLayout *grid=new QGridLayout;
QPushButton *ptnA=new QPushButton("A");
connect(ptnA,SIGNAL(clicked()),this,SLOT(testSS()));
connect(this,SIGNAL(testsig()),this,SLOT(testslot()));
grid->addWidget(ptnA);
setLayout(grid);
}
Widget::~Widget()
{
}
void Widget::testSS()
{
int ret=emit testsig();
qDebug()<<ret;
}
int Widget::testslot()
{
return 1020;
}
#ifndef WIDGET_H
#define WIDGET_H
#include <QtGui/QWidget>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
signals:
int testsig();
public slots:
int testslot();
void testSS();
};
#endif // WIDGET_H