国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - 淺談Qt信號與槽的各種連接方式

淺談Qt信號與槽的各種連接方式

2021-12-27 15:18lucky-billy C/C++

信號和槽是Qt特有的信息傳輸機制,本文主要介紹了淺談Qt信號與槽的各種連接方式,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

簡介

信號槽是 Qt 框架引以為豪的機制之一。當用戶觸發某個事件時,就會發出一個信號(signal),這種發出是沒有目的的,類似廣播。如果有對象對這個信號感興趣,它就會連接(connect)綁定一個函數(稱為槽slot)來處理這個信號。也就是說當信號發出時,被連接的槽函數會自動被回調。這有點類似與開發模式中的觀察者模式,即當發生了感興趣的事件,某一個操作就會被自動觸發

信號和槽是Qt特有的信息傳輸機制,是Qt設計程序的重要基礎,它可以讓互不干擾的對象建立一種聯系。槽的本質是類的成員函數,其參數可以是任意類型的。和普通C++成員函數幾乎沒有區別,它可以是虛函數,也可以被重載。可以是公有的、保護的、私有的、也可以被其他C++成員函數調用。唯一區別的是:槽可以與信號連接在一起,每當和槽連接的信號被發射的時候,就會調用這個槽

連接信號槽 connect 函數的第五個參數

connect 函數原型如下:
[static] QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

ConnectionType 是一個定義在 Qt namespace 中的一個枚舉,具體內容如下:

?
1
2
3
4
5
6
7
enum ConnectionType {
 AutoConnection,
 DirectConnection,
 QueuedConnection,
 BlockingQueuedConnection,
 UniqueConnection =  0x80
};
  • Qt::AutoConnection:默認值。根據 sender 和 receiver 所處線程在信號發出時作出判斷。如果在同一線程則使用 Qt::DirectConnection 連接,否則使用 Qt :: QueuedConnection 連接。需要注意的是,這個判斷和 sender 對象所處線程無關,真正判斷的是發出信號這個動作所在的線程
  • Qt::DirectConnection:槽函數會在信號發送的時候直接被調用,槽函數運行于信號發送者所在線程。效果看上去就像是直接在信號發送位置調用了槽函數。需要注意的是,在多線程環境下比較危險,可能會造成奔潰
  • Qt::QueuedConnection:槽函數在控制回到接收者所在線程的事件循環時被調用,槽函數運行于信號接收者所在線程。發送信號之后,槽函數不會立刻被調用,等到接收者的當前函數執行完,進入事件循環之后,槽函數才會被調用。多線程環境下一般用這個
  • Qt::BlockingQueuedConnection:槽函數的調用時機與 Qt::QueuedConnection 一致,不過發送完信號后發送者所在線程會阻塞,直到槽函數運行完,在多線程間需要同步的場合可能需要這個。需要注意的是,接收者和發送者絕對不能在一個線程,否則程序會死鎖
  • Qt::UniqueConnection:這個 flag 可以通過按位或(|)與以上四個結合在一起使用。當這個flag設置時,當某個信號和槽已經連接時,再進行重復的連接就會失敗,也就是避免了重復連接

信號與槽的連接方式

C++ 連接信號槽 - Qt4 語法

?
1
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(close()));

C++ 連接信號槽 - Qt5 語法

?
1
connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::close)

C++ 連接信號槽 - 函數指針

?
1
2
void(MainWindow:: *buttonClickSlot)() = &MainWindow::onButtonPushed;
connect(ui->pushButton, &QPushButton::clicked, this, buttonClickSlot);

C++ 連接信號槽 - Lambda 表達式

?
1
connect(ui->pushButton, &QPushButton::clicked, this, [=](){ this->close(); });

C++ 信號連接 QML 的槽

?
1
2
3
4
class Test {
signals:
 void sendData(QString str);   
}

1)如果注冊的是全局對象,則需要使用 Connections 連接:

?
1
2
3
4
5
6
Connections {
    target: test
    onSendData: {
        console.log(str)
    }
}

2)如果注冊的是類,則需要先實例化對象,之后直接使用 on 接收:

?
1
2
3
4
5
Test {
 onSendData: {
        console.log(str)
    }
}

QML 信號連接 C++ 的槽

?
1
2
3
4
5
#include <QQuickItem>
QObject *quitButton = root->findChild<QObject*>("quitButton");
if (quitButton) {
    QObject::connect(quitButton, SIGNAL(clicked()), &app, SLOT(quit()));
}

C++ 調用 QML 函數

?
1
2
3
4
5
QObject *changeBtn = root->findChild<QObject*>("objectName");
if (changeBtn)
{
    QMetaObject::invokeMethod(changeBtn, "changeColor");
}

QML 調用 C++ 函數

?
1
2
3
4
onClicked:
{
    className.test();
}

QML 信號連接 QML 的槽

?
1
2
3
4
5
6
7
8
9
// A.qml
Rectangle {
 signal sendData(var data)
}
 
// B.qml
Rectangle {
 onSendData: console.log(data)
}

到此這篇關于淺談Qt信號與槽的各種連接方式的文章就介紹到這了,更多相關Qt信號與槽連接內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/qq_34139994/article/details/120034393

延伸 · 閱讀

精彩推薦
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
主站蜘蛛池模板: 中文字幕日韩视频 | 国产精品成av人在线视午夜片 | 黄色毛片在线观看 | 日韩欧美国产一区二区 | 亚洲成人免费观看 | 国产精品日韩在线观看 | 国产精品二区一区二区aⅴ污介绍 | 日韩福利视频 | 精品一区二区三区免费 | 亚洲精品久久久久久久久久久 | 中文字幕在线免费 | 成人国产 | 国产在线视频一区二区 | 欧美亚洲天堂 | 欧美日韩电影一区二区 | 久久精品国产99国产精2020新增功能 | 国产毛片视频 | 精品96久久久久久中文字幕无 | 国产精品久久久久久中文字 | 久久精品国产77777蜜臀 | 亚洲一区二区三区四区的 | 亚洲在线一区 | 亚洲国产精品久久 | 日韩综合视频在线观看 | 欧美黄色精品 | 国产一区二区在线免费观看 | 91.成人天堂一区 | 成人爽a毛片一区二区免费 成年人毛片视频 | 国产精品高清在线 | 精品久久久久久国产 | 精品视频免费观看 | 午夜视频在线免费观看 | 久久久久久精 | 免费 视频 1级 | 在线激情网 | 亚洲a人| 91精品欧美久久久久久动漫 | 国内精品视频在线观看 | 欧美一级欧美三级在线观看 | 久久精品国产视频 | 欧美精品一区二区三区在线四季 |