VS下Qt訊號與槽的初體驗

2021-07-30 02:48:51 字數 2594 閱讀 2924

在qt中是使用訊號與槽的機制來完成事件的響應過程的。網上qt的開發基於qt creator的資料比較多,基於vs下的資料除了其環境配置方面的外就剩下很少了。開始以為2者環境下的開發方式相同,後面稍微接觸了下發現還是有微妙的區別的,qt在vs下畢竟是add-in嵌入的,用起來不如creator中方便,比如對某控制項而已不能自動go to slot,所以一些固定格式的**需要自己手動新增,幸運的是,2者下的開發大致相同。

程式實現的功能是:新增和刪除使用者的姓名和其email位址。其有2個介面,分別為1個主視窗介面和乙個對話新增使用者名稱和email視窗介面。

按照網頁教程分別完成下面步驟:

新建乙個qt應用程式框架

用qt設計師設計主視窗(其實也是乙個對話方塊視窗),主視窗包括1個qlistwidget,2個pushbutton,2個qlabel。

設計乙個」新增使用者位址」對話方塊介面,包括2個qlabel,2個qlinedit,1個qpushbutton。

為」新增使用者位址」介面的ok按鈕增加訊號與槽的聯絡。此時可以在ui設計師的編輯\訊號槽模式下進行,具體方法是拖動ok按鈕釋放後選擇對應的訊號與槽,見網頁詳細介紹。

實現主視窗中add按鈕的顯示」新增使用者位址」介面,並且響應該介面中的使用者名稱輸入和ok按鈕。這一部分要特別注意,除了實現功能**外,還需自己手動新增一些其他的**(qt creator可以自動新增,vs下找了很久沒有發現)。我們需要在3個地方新增**,第1個是在addressbook.h檔案下新增乙個槽函式宣告,即屬於private slots型別,新增後如下所示:

第2個新增地方為在addressbook.cpp中新增adddialog.h標頭檔案。

最後乙個地方為addressbook.cpp實現add按鈕功能,其**為(為什麼cnblog的**摺疊功能不能用呢?):  

void

addressbook::on_addbutton_clicked()}}

6. 用同樣的方法完成主視窗中顯示選中的item的功能

7. 用同樣的方法完成」新增使用者位址」介面的delete按鈕功能。

下面為幾個主要檔案的整體**:

adddialog.h:

#ifndef adddialog_h

#define adddialog_h#include

#include

"ui_adddialog.h

"class adddialog : public qdialog, public

ui::adddialog

;#endif

//adddialog_h

addressbook.h:

#ifndef addressbook_h

#define addressbook_h#include

#include

"ui_addressbook.h

"class addressbook : public

qmainwindow

;#endif

//addressbook_h

adddialog.cpp:

#include "

adddialog.h

"adddialog::adddialog(qwidget *parent)

: qdialog(parent)

adddialog::~adddialog()

addressbook.cpp:

#include "

addressbook.h

"#include

"adddialog.h

"addressbook::addressbook(qwidget *parent, qt::wflags flags)

: qmainwindow(parent, flags)

addressbook::~addressbook()

void

addressbook::on_addbutton_clicked()

}}void

addressbook::on_addresslist_currentitemchanged()

else

}void

addressbook::on_deletebutton_clicked()

}

main.cpp:

#include "

addressbook.h

"#include

本次試驗的主要總結有下面2點:

在ut設計師介面下,且執行於編輯\訊號槽模式,如果使用圖示連線了訊號與槽之間的關係的話,則在此類中的建構函式中不需要實現connect()函式連線訊號與槽了。如果槽函式是採用系統能識別的預設函式名。比如add按鈕對於系統預設的函式名on_addbutton_clicked(),則此時連設計介面的連線線等都不需要填了,直接可以在cpp程式中**實現自己的功能即可。

標籤: 

qt學習之路, 

qt

qt 槽與訊號

槽就是乙個可以被呼叫處理特定訊號的函式 乙個小的qt類如下 class foo public qobject public slots void setvalue int signals void valuechanged int private int val qt中的元物件系統是用來處理物件間通...

QT訊號與槽

初學qt,覺得理解qt訊號與槽比較重要,qt很多時候都需要用到訊號和槽。發射訊號會觸發相對應的槽函式的執行。乙個訊號可以對應多個槽,多個訊號可以對應乙個槽。訊號和槽是通過connect這個方法進行建立聯絡的。qt中有些類會自帶有一些訊號和槽函式,當然訊號和槽函式也可以自己定義。下面來看下很簡單的 會...

Qt訊號與槽

訊號的定義必須在signals 保留字下,並且不需要實現 槽的定義必須在slots 保留字下,需要實現 訊號和槽通過qobject connect函式連線 當訊號被觸發時,槽函式被呼叫 需要注意的是 訊號和槽是qt的拓展,所以實現訊號和槽的類,必須是qobject的子類 實現訊號和槽的類,必須以巨集...