1. 程式人生 > >Qt 靜態函式中如何傳送訊號

Qt 靜態函式中如何傳送訊號

根據連結中的部落格和我自己需求:需要讓靜態函式傳送訊號,另外一個類接收,再發送訊號,QML層接收

1:在自己除錯時候,原來總是出現物件A非單一。

2:怎麼也不能傳送訊號,this指標清楚是那個物件

3:最後這種方式,其實不是最佳

還希望懂的朋友說說如何優化

class A

.h標頭檔案中定義一個

staticA*mHandleScreen;

.cpp檔案中這樣做

A*A::mHandleScreen=NULL;    //初始化

關鍵----

A::A(QObject*parent):QObject(parent)
{
mHandleScreen=this;        //將自己賦值給自己
}

(靜態函式中)發訊號----

emit
mHandleScreen->sendCloseEditScreenId(count);

claas B

.cpp檔案

建構函式

B::B(QObject*parent):QObject(parent)
{
//TODO使用Q_GLOBAL_STATIC測試
A*handleScreen=newA;
connect(A::mHandleScreen,SIGNAL(sendCloseEditScreenId(int)),this,SLOT(receCloseScreenId(int)));
}

槽函式

voidB::receCloseScreenId(inteditScreenId)
{
emitsendCloseScreenId(
editScreenId);    //傳送一個訊號讓QML層相應
}

QML層

//BB就是B class 註冊進QML的別名,相當於例項化
BB{
id:BObj;
onSendCloseScreenId:{
//TODO 
}
}


相關推薦

Qt 靜態函式如何傳送訊號

根據連結中的部落格和我自己需求:需要讓靜態函式傳送訊號,另外一個類接收,再發送訊號,QML層接收1:在自己除錯時候,原來總是出現物件A非單一。2:怎麼也不能傳送訊號,this指標清楚是那個物件3:最後這種方式,其實不是最佳還希望懂的朋友說說如何優化class A.h標頭檔案中

QT 跨執行緒傳送訊號非元資料訊號解決

參考部落格: http://qimo601.iteye.com/blog/1673578 http://blog.csdn.net/luotuo44/article/details/39395025 http://blog.csdn.net/seanyxie/articl

android全域性獲取Context物件(在靜態函式實現toast)

全域性獲取Context物件的意義: 當應用程式的架構逐漸複雜起來的時候,很多邏輯程式碼都將脫離Activity或者Service,但是如果此時你又恰恰需要使用Context,這個時候就需要用到全域性獲取Context了。 舉個例子,如果此時需要實現一個從網路獲取圖片

qt訊號和槽問題(變數只在槽函式改變問題)

在連結一個類A和另一個類B一個物件的時候, 如果在A類物件中定義物件B,只使用B x方式定義,需要在connect第三個槽引數中使用引用,大部分情況是在A中new一個B的物件,便可以直接使用connect. A *x[24]=A *(x[24]); 然而在實際運用中,發生了這樣神奇的情況

QT函式獲取訊號傳送物件

## Qt 在槽函式中獲取訊號傳送物件 Qt中提供了一個函式 qobject_cast(QObject *object),可以通過這個函式判斷訊號發出物件 >Qt 幫助文件的解釋: Returns the given object cast to type T if the object is of

C++ 類的成員函式靜態區域性變數

class A { public: A(){} ~A(){} int GetStaticNum(); }; int A::GetStaticNum() { static int i = 0;//靜態區域性變數屬於該方法,與類的例項無關 i++; return i; } int

Java靜態變數和靜態函式

Java中的靜態變數和靜態函式 靜態變數:    在JAVA中類在宣告的時候,其實並沒有申請和產生記憶體空間,就如同我們的一個切實可行的想法,但其實並沒有去實施這個想法。而類只有在用這種資料型別建立一個類的物件的時候,才能在記憶體中申請和產生類大小的記憶體空間,這一塊記憶體空間是用來存放

多執行緒訊號機制--sigwait 函式

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

C++ 執行緒函式靜態函式 及 類成員函式作為回撥函式

 執行緒函式為靜態函式:   執行緒控制函式和是不是靜態函式沒關係,靜態函式是在構造中分配的地址空間,只有在析構時才釋放也就是全域性的東西,不管執行緒是否執行,靜態函式的地址是不變的,並不在執行緒堆疊中static只是起了一個裝飾的作用,所以二者並沒有必然的關係   執行緒也是一種

Qt通過訊號和槽在子執行緒和主執行緒進行資料傳遞

QT中兩個執行緒之間進行自定義型別資料傳遞 兩個執行緒中進行資料傳遞時,傳遞的資料放到佇列中(queue),所以在這個過程中,需要在傳遞前將資料拷貝、儲存到佇列中;為了儲存這些引數,Qt需要construct、destruct、copy這些物件,為了讓Qt知道

QTReadyRead()訊號只觸發一次問題解決

1、傳送端Write一次,那麼接收方就會有新資料到達,ReadyRead()訊號就會觸發一次,這種說法是錯誤的。 2、傳送方和接收方沒有一 一對應關係,傳送端Write()函式呼叫一次,假如這一次Write了較大資料(2M),那麼接收方ReadyRead()訊號往往會觸發兩

c++靜態函式與動態函式的區別

在C語言中,由於沒有類的概念,所以沒有靜態成員一說,在c中static的作用主要有2個: 一是隱藏功能,對於static修飾的函式和全域性變數而言二是保持永續性功能,對於static修飾的區域性變數而言。並且,因為存放在靜態區,全域性和區域性的static修飾的變數,都預設

QThread 與 QObject的關係(QObject可以用於多執行緒,可以傳送訊號呼叫存在於其他執行緒的slot函式,但GUI類不可重入)

QThread 繼承 QObject.。它可以傳送started和finished訊號,也提供了一些slot函式。 QObject.可以用於多執行緒,可以傳送訊號呼叫存在於其他執行緒的slot函式,也可以postevent給其他執行緒中的物件。之所以可以這樣做,是因為每個執行

Qt 執行緒使用httpclient傳送 post 請求

QT 5.92 (1) 在建構函式中初始化QNetworkAccessManager m_manager = new QNetworkAccessManager(); (2) 執行緒啟動之前繫結訊號和槽 QEventLoop temp_loop; connect(m_manager, SIG

html靜態頁面執行php、asp函式程式碼

啟用伺服器端包含 1、在IIS 管理器中,展開本地計算機,右鍵單擊“網站”資料夾(在所有網站上啟用 SSI),或者右鍵單擊某個特定的網站,然後單擊“屬性”。 2、單擊“主目錄”選項卡。 3、在“應用程式設定”部分中,單擊“配置”。 4、在“對映”選項卡上,單擊“新增”。 5

使用objdump檢視動態庫和靜態具有哪些函式

 我們在 Linux 下執行一個程式,有時會無法啟動,報缺少某某庫。這時需要檢視可執行程式或者動態庫中的符號表,動態庫的依賴項, Linux 有現成的工具可用:objdump 。 objdump 是 gcc 套件中用來檢視 ELF 檔案的工具,具體詳細用法不進行介紹,此

mfc靜態函式呼叫非靜態成員

靜態函式中呼叫非靜態,首先要獲取到對話方塊指標,最簡單最不推薦的方法是定義個全域性變數儲存對話方塊指標,通用性最強的是把指標作為靜態函式的引數傳進來。取巧的方法,如果對話方塊是主對話方塊可以AfxGetApp->GetMainWnd獲取指標。如果靜態函式不是執行在主執行緒,不能直接呼叫Upda

C語言使用靜態函式的好處

          靜態函式會被自動分配在一個一直使用的儲存區,直到退出應用程式例項,避免了呼叫函式時壓棧出棧,速度快很多。 關鍵字“static”,譯成中文就是“靜態的”,所以內部函式又稱靜態函式。但此處“static”的含義不是指儲存方式,而是指對函式的作用域僅侷限於本

檢查靜態的同名函式

靜態庫中可以有同名函式 這種做法肯定不是bad practice。但是誤操作可能導致這個問題的出現。 可以通過C++的namespace來解決這個問題。不過我不寫C++,那麼忽略它。 例子 test.h: #include <stdio.h> void play(); test.c void pl

Linux Signal (6): 傳送訊號的kill和raise 函式

1. 函式說明: kill和raise是用來發送訊號的: kill把訊號傳送給程序或程序組,它不僅可以中止程序,也可以向程序傳送其他訊號; raise把訊號傳送給(程序)自身. 它們的原型如下: #include <signal.h> #include <s