QT(3)物件和繼承 Addressbook例子1

2021-05-24 01:26:37 字數 2107 閱讀 1159

隔了幾天陰冷,今天下午閃了一絲陽光。

上次我們學習了如何構造乙個簡單的小例子,既然qt是c++ based,因此需要知曉如何建立乙個物件以及實現物件的繼承,同時我們對layout中的qgridlayout進行學習。

在上次的例子中,我們知道如果建立乙個不帶parent的qwidget,那麼這個widget就視為乙個window。現在,我們建立這樣乙個windows的類,將這個window作為panel在上面擺放各種元件,因此該類繼承qwidget。這個類名稱為addressbook,因此建立兩個檔案addressbook.cpp,addressbook.h,以及主函式所在qtmain.cpp。

相關參考:http://doc.qt.nokia.com/latest/tutorials-addressbook-part1.html

在這個addressbook的windows上,我們採用guidlayout的方式來排放,下圖是最後的執行結果,左圖是在handset模擬器執行,右圖在ubuntu上的執行,並加上了元件擺放位置。

一、寫*.pro檔案

#和以前的例子像比較,增加了target預設為*.pro檔案的名字,如果不同,需要重新定義,並且將所需編譯的標頭檔案和源**檔案補充如sources和headers兩個引數

target  = local-test2

sources =qtmain.cpp addressbook.cpp

headers =addressbook.h

vpath   = src

objects_dir = build

destdir     = build

二、物件的標頭檔案:addressbook.h

/* addressbook.h -  定義addressbook類,作為qwidget的乙個繼承子類,並定義乙個constructor。 */

#ifndef com_wei_addressbook_h

#define com_wei_addressbook_h

#include

/* 由於我們在addressbook中使用了qlineedit和qtextedit兩個類,不在qwidget的定義範圍,因此為了保證編譯通過,需要在此處定義(感覺有些像c裡面的extern定義),否則在編譯的時候會報告:的在iso c++ forbids declaration of 『qlineedit』 with no type 。如果#include ,不加這個兩個也可以,但是會生成乙個moc_addressbook.cpp的檔案。*/

class qlineedit; 

class qtextedit;

class addressbook :public qwidget//注意繼承的書寫方式

; #endif

三、物件原始檔:addressbook.cpp

/* addressbook.cpp - the implementation file for the addressbook class */

#include

#include "addressbook.h"

addressbook ::addressbook(qwidget * parent) :qwidget(parent) //整合建構函式,並注意繼承的書寫格式。

四、主檔案main()

/* qtmain.cpp - the file containing a main() function, with an instance of  addressbook. */

#include

#include "addressbook.h"

addressbook addressbook;

addressbook.show();

2018 3 6 物件的繼承

物件繼承 類a具有某些特徵,類 b也具有 a類的所有特徵,同時具有自己更多的一些特徵,此時發現,b類使用 a的特徵資訊並繼續新增自己的一些特有特徵資訊。我們可以說b類繼承於a類。class jizuidongwu class human extends jizuidongwu person1 new...

C 繼承 5 物件切割

目錄 1.物件切割的場景 2.物件切割的避免方法 2.1使用引用 2.2使用指標 2.3使用純虛函式 c 中,乙個子類物件可以直接賦值給乙個基類物件,但是反之則不行。如下例子所示 class base class derived public base int main 物件切割發生在乙個子類物件賦...

as2 AVM1物件和as3物件的通訊

注意本人遇到的 connection名稱問題,因為實際上是域 名稱,呼叫時有時會找不到,因此在connection名稱前加 更真實的原因是as1.0不支援connection,所以發布時一定要看清楚哈,用flash player6不一定是as2.0 具有不可預知網域名稱的不同域。有時候,可能希望具有...