初始QT 3 -------- 訊號、槽、Lamda表示式
新建兩個類:MyWidget,NewWidget
檔案MyWidget.cpp內容為:
#include "mywidget.h" MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { // QPushButton b1("b1", this); // 記憶體管理,當物件被釋放的時候,會將它的所有子物件都釋放掉 QPushButton *b1 = new QPushButton("b1", this); //只能用new的方式 QPushButton *b2 = new QPushButton("b2", this); b3 = new QPushButton("b3", this); b4 = new QPushButton("b4", this); b5 = new QPushButton("b5", this); b3->move(200,200); b4->move(200,0); b1->move(100,100); b5->move(0,100); // Qt4的寫法,用 SINGNAL 和 SLOT巨集 connect(b1, SIGNAL(clicked()), this, SLOT(close())); // Qt5的寫法 // 1、訊號的傳送者 // 2、傳送的訊號: &傳送者型別::傳送的訊號 // 3、接收者 // 4、接收者的處理函式: &接收者型別::處理函式 connect(b2, &QPushButton::clicked, this, &MyWidget::close); // 自定義槽函式 // 1、自定義槽函式放在 slots 關鍵字下 // 2、槽函式返回值型別為 void // 3、槽函式的引數要訊號函式保持一致 connect(b3, SIGNAL(clicked()), this, SLOT(handleClicked())); connect(b5, SIGNAL(clicked()), this, SLOT(newWidget())); // 自定義訊號 // 1、自定義訊號函式放在 signals 關鍵字下 // 2、訊號函式返回值是void ,函式只有宣告,不需要實現 // 3、訊號發射: 用 emit 關鍵字 connect(&nw, SIGNAL(sendSigNal()), this, SLOT(reShow())); // Lamda表示式 C++11 的特性 -----> 匿名函式 QPushButton *b6 = new QPushButton("b6", this); b6->move(100, 300); // connect 使用Lamda表示式必須使用qt5的方式 // 1、匿名函式不是類的成員函式,匿名函式和外部是不通的,不能使用外部的變數 // 2、外部的可以傳給匿名函式 /*常用的引數: * [=]: 外部資料以值傳遞的形式傳入到匿名函式內部 * [&]: 外部資料以引用形式傳入到匿名函式內部 * * 比較常用的形式: * [this] : 將this指標傳遞到匿名函式匿名 ----> 在匿名函式內部可以使用this指標 */ connect(b6, &QPushButton::clicked, [this]() { static int i = 0; if (i++ % 2 == 0) b3->setText("123"); // this->b3->setText("123"); else b3->setText("abc"); // this->b3->setText("abc"); }); } void MyWidget::handleClicked() { static int i = 0; if (i++ % 2 == 0) b4->setText("123"); else b4->setText("abc"); int x = b4->x(); int y = b4->y(); x += 50; if (x > this->width()) { y += 150; x = 0; } if (y > this->height()) { y = 0; } b4->move(x, y); } void MyWidget::newWidget() { nw.show(); this->hide(); // 當前視窗隱藏 } void MyWidget::reShow() { nw.hide(); this->show(); }
檔案MyWidget.h內容為:
#ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> #include <QPushButton> #include "newwidget.h" class MyWidget : public QWidget { Q_OBJECT public: explicit MyWidget(QWidget *parent = 0); signals: public slots: //自定義的槽 void handleClicked(); void newWidget(); void reShow(); private: QPushButton *b3; QPushButton *b4; QPushButton *b5; NewWidget nw; }; #endif // MYWIDGET_H
檔案NewWidget.cpp中的內容為:
#include "newwidget.h" NewWidget::NewWidget(QWidget *parent) : QWidget(parent) { QPushButton *b = new QPushButton("new", this); connect(b, SIGNAL(clicked()), this, SLOT(handleClicked())); resize(400,400); } void NewWidget::handleClicked() { emit sendSigNal(); //傳送訊號用emit關鍵字 }
檔案NewWidget.h中的內容為:
#ifndef NEWWIDGET_H
#define NEWWIDGET_H
#include <QWidget>
#include <QPushButton>
class NewWidget : public QWidget
{
Q_OBJECT
public:
explicit NewWidget(QWidget *parent = 0);
signals: //自定義的訊號
void sendSigNal();
public slots:
void handleClicked();
};
#endif // NEWWIDGET_H
相關推薦
初始QT 3 -------- 訊號、槽、Lamda表示式
新建兩個類:MyWidget,NewWidget 檔案MyWidget.cpp內容為: #include "mywidget.h" MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { // QPushB
Qt中訊號和槽函式的3種對映方法
在Qt Creater中提供了三種建立訊號和槽的方法,詳細介紹如下: 實現功能:點選OK按鈕,TextLabel顯示“Hello World” 詳細過程: 首先,執行Qt Creater,建立Qt Gui application工程。 其次,在點選.ui檔案,在控制元件欄
QT---之訊號和槽的關聯與語法
一概述 二訊號 四訊號和槽的關聯 五元物件工具 六程式樣例 七應注意的問題 8訊號和槽也不能攜帶模板類引數 9巢狀的類不能位於訊號或槽區域內也不能有訊號或槽
QT使用訊號與槽注意事項
QT使用訊號與槽注意事項 如需轉載請標明出處:http://blog.csdn.net/itas109 QQ技術交流群:129518033 目錄 文章目錄 QT使用訊號與槽注意事項 @[toc] 前言
Qt學習之路_3(VS下Qt的訊號與槽初次體驗)
在Qt中是使用訊號與槽的機制來完成事件的響應過程的。網上Qt的開發基於Qt Creator的資料比較多,基於vs下的資料除了其環境配置方面的外就剩下很少了。開始以為2者環境下的開發方式相同,後面稍微接觸了下發現還是有微妙的區別的,Qt在vs下畢竟是add-in嵌入的,用起
Qt的訊號與槽的工作機制
void QMetaObject::activate(QObject *sender, const QMetaObject *m, int local_signal_index, void **argv) { activate(sender, QM
C++ ——Qt的訊號和槽的詳解
1、概述 訊號槽是 Qt 框架引以為豪的機制之一。所謂訊號槽,實際就是觀察者模式。當某個事件發生之後,比如,按鈕檢測到自己被點選了一下,它就會發出一個訊號(signal)。這種發出是沒有目的的,類似廣播。如果有物件對這個訊號感興趣,它就會使用連線(connect)函式,
【Qt】訊號和槽對值傳遞引數和引用傳遞引數的總結
在同一個執行緒中 當訊號和槽都在同一個執行緒中時,值傳遞引數和引用傳遞引數有區別: 值傳遞會複製物件;(測試時,列印傳遞前後的地址不同) 引用傳遞不會複製物件;(測試時,列印傳遞前後的地址相同)
Qt的訊號與槽你可能不知道的那些
說到訊號與槽,這是Qt獨有的特點。 1、應該知道的: 一般用訊號和槽都會用到:signals和slots Qt4用法: connect(sender, SIGNAL(signal), rece
Qt 的訊號與槽(純乾貨)
接觸Qt斷斷續續有些時間了,總看了一堆的文章說訊號槽的概念,心裡就想罵人,做為一個初學者,最重要的就是怎麼寫程式碼,寫程式碼寫多了,再去看理論,有時水到渠成的就明白那些理論了。但所有講訊號槽的都把一堆訊號槽的好處說一通,把MFC的訊息機制貶一通。具體程式碼
QT學習day02---圖形介面、對話方塊、訊號與槽
一、QT圖形介面 ①QT座標軸 起點:左上角 X:橫軸 Y:縱軸 ②QWidget、QDialog、QMainWindow的異同點 QWidget:視窗為空,什麼內容都沒有 QMainWindow:含有選單欄,狀態列,工具欄等…已經包含了QWidget QDialog:對話方塊(
深入理解Qt訊號和槽機制、訊號和槽中的Lambda表示式
對於事件處理,MFC中使用的是訊息對映機制,Qt使用的是訊號和槽機制,在我看來,Qt的訊號和槽比MFC功能更強大,也更靈活。1、訊號和槽的簡單介紹: 一般格式: connect(Sender,SIGNAL(signal),Receiver,SLOT(slot));
QT入門(一)Qt工程簡介、訊號與槽初步練習
QT程式結構 程式特點 跟普通程式一樣,標頭檔案,原始檔,工程檔案.pro 標頭檔案特點 QT系統標頭檔案沒有.h 標頭檔案和類名一樣 命名Q開頭,前兩個字母大寫 工程檔案.Pro的相關介紹 # 模組 QT += core gui # 高於4版
LoRa關鍵引數 1、擴頻因子(SF) 2、編位元速率(CR) 3、訊號頻寬(BW) 4、LoRa訊號頻寬BW、符號速率Rs和資料速率DR的關係
LoRa學習:LoRa關鍵引數(擴頻因子,編位元速率,頻寬)的設定及解釋 1、擴頻因子(SF) 2、編位元速率(CR) 3、訊號頻寬(BW) 4、LoRa訊號頻寬BW、符號速率Rs和資料速率DR的關係 5、 LoRa訊號頻寬、擴頻
spark1.6轉到spark2.3總結(依賴、版本、初始化問題)
問題:pom裡面不寫spark版本(<spark.version>2.0.0</spark.version>)的話,可能會預設用spark1.6導致版本衝突異常——語法通過但無法編譯執行 問題(spark版本必須對應Scala版本):參考https:/
有四個執行緒1、2、3、4,執行緒1的功能就是輸出1,執行緒2的功能就是輸出2,以此類推......... 現在有四個檔案A B C D,初始都為空。現要讓四個檔案呈如下格式:A:1 2 3 4 1 2..
具體題目如下: 有四個執行緒1、2、3、4, 執行緒1的功能就是輸出1,執行緒2的功能就是輸出2, 以此類推......... 現在有四個檔案A B C D, 初始都為空。現要讓四個檔案呈如下格式: A:1 2 3 4 1 2.... B:2 3 4 1 2 3....
Qt入門之基礎篇 ( 二 ) :Qt項目建立、編譯、運行和發布過程解析
qt 5 對話 讓我 進度 qmake ctr deploy 設定 設置 轉載請註明出處:CN_Simo。 題解: 本篇內容主講Qt應用從創建到發布的整個過程,旨在幫助讀者能夠快速走進Qt的世界。 本來計劃是講解Qt源碼靜態編譯,如此的話讀者可能並不能清楚地知
初始化的數值(int、double等)(一)
ng- private pub num 構造 ext signed 代碼 模板 首先考慮一個具有幾個構造函數的MyClass類。如果我們決定在這個類的私有部分加入一個新的數據成員,稱為int_data_: class MyClass { public: MyClas
SpringMVC案例3----spring3.0項目攔截器、ajax、文件上傳應用
his water aop pro 文件夾 創建 adapt 後綴 實現 依然是項目結構圖和所需jar包圖: 顯示配置文件hib-config.xml <?xml version="1.0" encoding=&qu
Charles Proxy v4.1.3 Mac、Win64、Win32破解版
app lib 下載 裏的 windows java https contents tar 1. 下載Charles Proxy 4.1.3版本,百度雲盤下載 或 去官網下載 2. 安裝後先打開Charles一次(Windows版可以忽略此步驟) 3. 在這個網站(http