Qt工作笔记-Qt5新版信号与槽
運(yùn)行截圖如下:
格式如下:
[static] QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal,const QObject *receiver,PointerToMemberFunction method,Qt::ConnectionType type = Qt::AutoConnection)
如:
connect(m_form,&Form::sendMsg,this,&Widget::receivData);與前者最大的不同就是,指定信號和槽兩個參數(shù)時不用再使用SIGNAL()和SLOT()宏,并且槽函數(shù)不再必須是使用slots關(guān)鍵字聲明的函數(shù),而可以是任意能和信號關(guān)聯(lián)的成員函數(shù)。要使一個成員函數(shù)可以和信號關(guān)聯(lián),那么這個函數(shù)的參數(shù)數(shù)目不能超過信號的參數(shù)數(shù)目,但是并不要求該函數(shù)擁有的參數(shù)類型與信號中對應(yīng)的參數(shù)類型完全一致,只需要可以進(jìn)行隱式轉(zhuǎn)換即可。使用這種重載形式,前面程序中的關(guān)聯(lián)可以使用如下代碼代替。
使用這種方式與前一種相比,還有一個好處就是可以在編譯時進(jìn)行檢查,信號或槽的拼寫錯誤、槽函數(shù)參數(shù)數(shù)目多于信號的參數(shù)數(shù)目等錯誤在編譯時就能夠被發(fā)現(xiàn)。
代碼如下:
widget.h
#ifndef WIDGET_H #define WIDGET_H#include <QWidget>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();void receivData(QString msg);private:Ui::Widget *ui; };#endif // WIDGET_Hform.h
#ifndef FORM_H #define FORM_H#include <QWidget>namespace Ui { class Form; }class Form : public QWidget {Q_OBJECTpublic:explicit Form(QWidget *parent = 0);~Form();signals:void sendMsg(QString msg);public slots:void btnClicked();private:Ui::Form *ui; };#endif // FORM_Hwidget.cpp
#include "widget.h" #include "ui_widget.h" #include "form.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);this->setWindowTitle("CSDN IT1995");Form *m_form=new Form();m_form->show();connect(m_form,&Form::sendMsg,this,&Widget::receivData); }void Widget::receivData(QString msg){ui->lineEdit->setText(msg); }Widget::~Widget() {delete ui; }form.cpp
#include "form.h" #include "ui_form.h"Form::Form(QWidget *parent) :QWidget(parent),ui(new Ui::Form) {ui->setupUi(this);this->setWindowTitle("CSDN IT1995");connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(btnClicked())); }void Form::btnClicked(){emit sendMsg(ui->lineEdit->text()); }Form::~Form() {delete ui; }main.cpp
#include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }總結(jié)
以上是生活随笔為你收集整理的Qt工作笔记-Qt5新版信号与槽的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt工作笔记-QLineEdit与QTe
- 下一篇: Qt工作笔记-对*QObject::se