QT信號和槽函數學習筆記

//connect 函數有4個參數 分別是 發送者 信號。接受者 ,槽
//connect(sender,signal,receiver,slot)
/*
* 信號和槽
* 信號 就是一個普通的函數 定義信號的時候需要在函數前面加上signals: ,不需要實現
* 槽 函數 在QT5中科院是類的任意成員函數,靜態函數,全局函數 lambda 表達式
* QT4中槽函數的定義 public slots: void send();
* 信號和槽是可以自定義的
* 信號和槽是沒有返回值的
* 信號和槽函數可以帶參數
* 信號和槽函數的參數必須要一一對應的
* 信號和槽函數的參數可以是不一樣的但是槽函數的參數個數可以少于信號的參數個數
* 信號槽函數傳參數的數據類型:
* 先看QT4的
* connect(sender,SIGNAL(sig1(int,double,Qstring)),receiver,SLOT(slot1(int,double,Qstring)));
* SIGNAL 和SLOT 是兩個宏 將函數轉換成字符串
* 缺點 編譯時不會做錯誤檢查
* QT5中
* connect(sender,&sender::sig1,receiver,&receiver::slot1);
*/

//創建一個按鈕對象
QPushButton * Lpbutton =new QPushButton;
//將按鈕添加到主窗口中 設置按鈕的父窗口句柄
Lpbutton->setParent(this);
//設置按鈕的標題title
Lpbutton->setText("關閉窗口");
//信號和槽的簡單實現
//qt5的方式
// connect(Lpbutton,&QPushButton::clicked,this,&MyWidget::close);
//Qt4的方式
connect(Lpbutton,SIGNAL(clicked(bool)),this,SLOT(close()));

自定義信號和槽函數的使用

創建兩個類 一個報紙類一個讀者類
報紙類先聲明 信號和發送信號的函數
//然后我們定義一個發送信號的函數
void SendSignals();

signals:
//自定義一個信號
void signalFunc(); //沒有返回值 不需要實現
然后 我們來實現發送信號的函數
void NewSpaper::SendSignals()
{
//這個函數的主要作用就是發送信號
//在QT中我們要發送信號的話需要用到關鍵字emit信號的函數名
emit signalFunc();
}
下面我們再來處理讀者類的槽函數

public slots:
//讀者類中我們需要自定義一個槽函數
void SlostFunc();
實現槽函數功能
void Reader::SlostFunc()
{
//我們來實現以下槽函數 這里需要用到 控制臺打印調試信息所以我們需要用到
//一個QDebug類
qDebug() <<"我要去買報紙";
}
連接信號和槽函數
//創建讀者類和報紙類
NewSpaper* NewSpa1 =new NewSpaper;
Reader* Read1 = new Reader;
//連接信號和槽
connect(NewSpa1,&NewSpaper::signalFunc,Read1,&Reader::SlostFunc);
//然后是發送信號
NewSpa1->SendSignals();

當然信號和槽函數在c++中是一個普通的函數 它也存在重載機制
下面我們來重載信號和槽函數
重載報紙的構造函數
explicit NewSpaper(QString name,QObject *parent = 0);
//重載信號
void signalFunc(QString name); //沒有返回值 不需要實現
NewSpaper::NewSpaper(QString name,QObject *parent) : QObject(parent)
{
Qs_name = name;
}
void NewSpaper::SendSignals()
{
//這個函數的主要作用就是發送信號
//在QT中我們要發送信號的話需要用到關鍵字emit信號的函數名
emit signalFunc();
emit signalFunc(Qs_name);

}
重載讀者的槽函數
//重載槽函數
void SlostFunc(QString name);
//重載槽函數
void Reader::SlostFunc(QString name)
{
qDebug() <<"我要去買:"<<name.toStdString().c_str();
}
Reader* Read1 = new Reader;
NewSpaper* NewSpa2 =new NewSpaper("人民日報"); //重載信號函數
//連接信號和槽
// connect(NewSpa1,&NewSpaper::signalFunc,Read1,&Reader::SlostFunc);
//QT4方式實現重載信號槽函數的連接
// connect(NewSpa2,SIGNAL(signalFunc(QString)),Read1,SLOT(SlostFunc(QString)));
//QT5方式實現重載信號槽函數的連接 主要是用到類型轉換 函數指針轉換即可
connect(NewSpa2,static_cast<void (NewSpaper::*)(QString)>(&NewSpaper::signalFunc),Read1,static_cast<void (Reader::*)(QString)>(&Reader::SlostFunc));
//然后是發送信號
NewSpa2->SendSignals();

QT中信號和槽的擴展
//信號和槽的擴展
/*
* 一個信號可以連接多個槽函數
* 槽函數的執行順序是隨機的無法控制
* 一個槽函數可以同時被多個信號連接
* 槽函數可以使用lambda表達式
* 信號可以連接信號可以接力
* 先連接第一個信號槽
* connect(NewSpa2,static_cast<void (NewSpaper::*)()>(&NewSpaper::signalFunc),Read1,static_cast<void (Reader::*)()>(&Reader::SlostFunc));
* 然后再連接第二個信號槽
* connect(Lpbutton,&QPushButton::clicked,NewSpa2,static_cast<void (NewSpaper::*)()>(&NewSpaper::signalFunc));
* 信號槽連接之后可以被斷開。可以使用disconnect函數斷開
*
*/

轉載于:https://www.cnblogs.com/guolongzheng/p/7726338.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370860.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370860.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370860.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫和Webapp安全

威脅模型 這是根據我網站上的快速參考頁松散地討論數據庫和Webapp安全的問題。 該頁面變得笨拙&#xff0c;并且使讀者無法輕松地與我或其他人進行交互。 威脅模型 所有安全分析都必須從檢查威脅模型開始。 威脅模型要求您回答四個問題&#xff1a; 我要保護的是什么&#…

note同步不及時 one_一輛理想ONE又“跪了”?理想官方緊急發文回應

汽車行業關注(autochat.com.cn)10月16日報道——10月15日&#xff0c;有網友在社交媒體上發布視頻&#xff0c;從視頻可以看到&#xff0c;一輛理想ONE在遭遇事故后&#xff0c;左前輪脫落在車外疑似斷軸,從視頻未能判定是斷軸引起的事故&#xff0c;還是事故引起的斷軸。針對該…

C語言連續多個空格合并一個,C語言合并連續空格

一開始自己寫的&#xff1a;a&#xff1a;#includemain(){int c;int state0;while (( cgetchar()) ! EOF) {if (c ){state1;continue;}if (state){state0;putchar( );putchar(c);}elseputchar(c);}}網上搜的&#xff1a;b:#include #define NONBLANK avoid main(){int c , last…

Skywalking 中 Agent 自動同步配置源碼解析

文章目錄 前言正文實現架構實現模型OAP 同步 ApolloConfigWatcherRegisterConfigChangeWatcher Agent 側 前言 本文代碼 OAP 基于 v9.7&#xff0c;Java Agent 基于 v9.1&#xff0c;配置中心使用 apollo。 看本文需要配合代碼“食用”。 正文 Skywalking 中就使用這種模型…

華為5720設置靜態路由不通_【干貨分享】交換機與路由器在環路中的處理機制了解一下!...

點擊藍字關注我們-今天小盟帶大家來討論一下交換機與路由器在環路中的處理機制-01基礎配置1---如圖配置路由器各接口地址&#xff0c;AR-2為PC-1的網關路由器2---AR-1配置靜態默認路由&#xff0c;下一跳地址指向AR-2&#xff1b;[AR-1]ip route-static 0.0.0.0 0 12.1.1.2AR-2…

IPC 進程間通信方式——信號量

信號量 本質上是共享資源的數目&#xff0c;用來控制對共享資源的訪問。用于進程間的互斥和同步每種共享資源對應一個信號量&#xff0c;為了便于大量共享資源的操作引入了信號量集&#xff0c;可對多對信號量一次性操作。對信號量集中所有的操作可以要求全部成功&#xff0c;也…

css選擇器的優先級

選擇器的優先級表述為4個部分&#xff0c;用0,0,0,0表示。 !important--1,0,0,0行內樣式ID選擇器--0,1,0,0類選擇器(例如,.example)、屬性選擇器&#xff08;例如, [type"radio"]&#xff09;或偽類&#xff08;例如, :hover&#xff09;--0,0,1,0元素&#xff08;例…

VisualVM介紹使用

1 打開VisualVM&#xff08;這個工具放在JDK安裝目錄的bin目錄下&#xff0c;雙擊jvisualvm.exe即可打開&#xff09;&#xff0c;如下圖所示 以VisualVM自身為例&#xff0c;VisualVM本身也是一個java程序&#xff0c;當然也而已用VisualVM來分析 2 概述頁面主要顯示程序…

c語言奇葩錯誤,6個奇葩的(hello,world)C語言版(轉)

//下面的所有程序都可以在GCC下編譯通過&#xff0c;只有最后一個需要動用C的編譯器用才能編譯通過。//程序功能輸出 Hello,world!01.c#define _________ }#define ________ putchar#define _______ main#define _(a) ________(a);#define ______ _______(){#define __ _____…

Java功能的適用性

Java語言和標準庫功能強大&#xff0c;但功能強大&#xff0c; 責任重大 。 一方面看到很多用戶代碼濫用或濫用稀有的Java功能&#xff0c;另一方面卻完全忘記了大多數基本功能之后&#xff0c;我決定撰寫此摘要。 這不是每個Java開發人員都應該探索&#xff0c;了解和使用的要…

臺達b3伺服modbus通訊_【數控系統】臺達伺服壓機控制靈活 精準壓合滿足各種工序需求...

引言壓機是一種利用壓力改變工件形狀的機械設備。隨著制造業少量多樣與客制化的日趨發展&#xff0c;壓機的的優勢逐漸顯現&#xff0c;在汽車、五金與電子制造等產業中的應用不斷增多。傳統壓機在使用操作上耗費人力并需要諸多壓機元件才能完整運作&#xff0c;維修成本高&…

Binary Agents(二進制值轉換字符串)

題目&#xff1a; 傳入二進制字符串&#xff0c;翻譯成英語句子并返回。 二進制字符串是以空格分隔的。 代碼&#xff1a; 1 function binaryAgent(str) {2 var arr str.split( );3 for (var i 0; i < arr.length; i) {4 arr.splice(i,1,String.fromCharCode(BtoD…

我對CSS選擇器的認識

我對CSS選擇器的認識 一、簡述   CSS選擇器是對HTML元素進行選擇的篩選條件&#xff0c;大概可以分為兩類&#xff1a; 特征選擇器——根據元素自身所具有的某種特征進行篩選&#xff0c;比如名稱、ID、屬性等&#xff1b;關系選擇器——根據元素與其他元素的關系進行篩選&…

【USACO2006 Mar】滑雪纜車 skilift

【USACO2006 Mar】 滑雪纜車 skilift Time Limit 1000 msMemory Limit 131072 KBytes Description 科羅拉多州的羅恩打算為奶牛建造一個滑雪場&#xff0c;為此要在山上規劃一條纜車線路。 整座山可以用一條折線來描述&#xff0c;該折線有N個拐點&#xff0c;起點是1&#xff…

yolov4Linux,基于Darknet的YOLOv4目標檢測

目錄一、Windows環境下的YOLOv4目標檢測1、環境配置環境準備&#xff1a;Win10、CUDA10.1、cuDNN7.65、Visual Studio 2019、OpenCV 3.4(1)Visual Studio2019企業版安裝(3)下載并安裝CUDA10.1&#xff0c;下載安裝cuDNN7.65對于cudnn直接將其解開壓縮包&#xff0c;然后需要將b…

二元置信橢圓r語言_醫學統計與R語言:圓形樹狀圖(circular dendrogram)

微信公眾號&#xff1a;醫學統計與R語言如果你覺得對你有幫助&#xff0c;歡迎轉發輸入1&#xff1a; "ggraph")結果1&#xff1a; name 輸入2&#xff1a; <- graph_from_data_frame(myedges1, verticesmyvertices,directed T)ggraph(mygraph, layout dend…

Java:檢查器框架

我在JavaOne 2012上 了解的有趣的工具之一是Checker Framework 。 Checker Framework的網頁之一 指出 &#xff0c;Checker Framework“增強了Java的類型系統&#xff0c;使其更強大&#xff0c;更有用”&#xff0c;從而使軟件開發人員“能夠檢測并防止Java程序中的錯誤”。 查…

南岸焊接機器人廠_造船三部高效焊接工藝技術年鑒

為了提升公司高效焊自動化率&#xff0c;實現降本增效目標&#xff0c;造船事業三部積極響應公司領導號召&#xff0c;充分挖掘自身資源&#xff0c;2020年&#xff0c;在高效焊接技術、設備開發研究等方面&#xff0c;不斷創新、敢于突破&#xff0c;獲取了多項焊接新技術、新…

軟工Hello World!團隊第二周博客匯總

2017.10.20-2017.10.26 Scrum會議&#xff1a; 第一天&#xff1a;http://www.cnblogs.com/liusx0303/p/7704482.html 第二天&#xff1a;http://www.cnblogs.com/Mingezi/p/7709472.html 第三天&#xff1a;http://www.cnblogs.com/lynlyn/p/7717275.html 第四天&#xff1a;h…

什么是css sprites,如何使用?

css sprites&#xff1a;精靈圖&#xff08;雪碧圖&#xff09;&#xff1a;把一堆小圖片整合在一張大圖上&#xff0c;通過背景圖片相關設置&#xff08;背景圖片、背景圖是否重復、背景圖定位&#xff09;&#xff0c;顯示圖片&#xff0c;減輕服務器對圖片的請求數量 優點&…