使用QObject::connect函数来连接信号和槽。
使用QObject::disconnect函数来断开信号和槽。
Qt::AutoConnection:自动选择连接方式,同线程调用使用Qt::DirectConnection,跨线程调用使用Qt::QueuedConnection。
Qt::DirectConnection:立即调用槽函数,槽函数运行在发送端线程(同步调用)。
Qt::QueuedConnection:将信号放入接收端的消息队列中并立即返回,槽函数运行在接收端线程(异步调用)。
Qt::BlockingQueuedConnection:将信号放入接收端的消息队列中并阻塞,直到接收端处理完毕,槽函数运行在接收端线程(同步调用)。如果在相同线程使用会造成死锁,所以不建议使用这种方式。
Qt::UniqueConnection:表明此连接是唯一连接,重复连接会fail。可与上述类型按位或搭配使用。(不能用于匿名槽函数)
Qt::SingleShotConnection:表明此连接只生效连接一次,一次生效以后立即自动断开连接。
Sample 1:
QLabel *label = new QLabel;
QScrollBar *scrollBar = new QScrollBar;
QObject::connect(scrollBar, SIGNAL(valueChanged(int)),
label, SLOT(setNum(int)));
Sample2:
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget();
signals:
void buttonClicked();
private:
QPushButton *myButton;
};
MyWidget::MyWidget()
{
myButton = new QPushButton(this);
connect(myButton, SIGNAL(clicked()),
this, SIGNAL(buttonClicked()));
}
Sample3:
QLabel *label = new QLabel;
QLineEdit *lineEdit = new QLineEdit;
QObject::connect(lineEdit, &QLineEdit::textChanged,
label, &QLabel::setText);
Useful link: