Qt入門(15)——使用視窗部件
下面是如何建立一個你自己的視窗部件,描述如何控制一個視窗部件的最小大小和最大大小,並且介紹了視窗部件的名稱。
這裡我們建立了一個新類。因為這個類繼承了QWidget,所以新類是一個視窗部件,並且可以最為一個頂層視窗或者子視窗部件(像第三章裡面的按鈕)。
這個類只有一個成員函式,建構函式(加上從QWidget繼承來的成員函式)。這個建構函式是一個標準的Qt視窗部件建構函式,當你建立視窗部件時,你應該總是包含一個相似的建構函式。
第一個引數是它的父視窗部件。為了生成一個頂層視窗,你指定一個空指標作為父視窗部件。就像你看到的那樣,這個視窗部件預設地被認做是一個頂層視窗。
第二個引數是這個視窗部件的名稱。這個不是顯示在視窗標題欄或者按鈕上的文字。這只是分配給視窗部件的一個名稱,以後可以用來查詢這個視窗部件,並且這裡還有一個方便的除錯功能可以完整地列出視窗部件層次。
MyWidget::MyWidget( QWidget *parent, const char *name )
: QWidget( parent, name )
建構函式的實現從這裡開始。像大多數視窗部件一樣,它把parent和name傳遞給了QWidget的建構函式。
{
setMinimumSize( 200, 120 );
setMaximumSize( 200, 120 );
因為這個視窗部件不知道如何處理重新定義大小,我們把它的最小大小和最大大小設定為相等的值,這樣我們就確定了它的大小。在下一章,我們將演示視窗部件如何響應使用者的重新定義大小事件。
QPushButton *quit = new QPushButton( "Quit", this, "quit" );
quit->setGeometry( 62, 40, 75, 30 );
quit->setFont( QFont( "Times", 18, QFont::Bold ) );
這裡我們建立並設定了這個視窗部件的一個名稱為“quit”的子視窗部件(新視窗部件的父視窗部件是this)。這個視窗部件名稱和按鈕文字沒有關係,只是在這一情況下碰巧相似。
注意quit是這個建構函式中的區域性變數。MyWidget不能跟蹤它,但Qt可以,當MyWidget被刪除的時候,預設地它也會被刪除。這就是為什麼MyWidget不需要一個解構函式的原因。(另外一方面,如果你選擇刪除一個子視窗部件,也沒什麼壞處,這個子視窗部件會自動告訴Qt它即將死亡。)
setGeometry()呼叫和上一章的move()和resize()是一樣的。
connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );
}
因為MyWidget類不知道這個應用程式物件,它不得不連線到Qt的指標,qApp。
一個視窗部件就是一個軟體元件並且它應該儘量少地知道關於它的環境,因為它應該儘可能的通用和可重用。
知道了應用程式的名稱將會打破上述原則,所以在一個元件,比如MyWidget,需要和應用程式物件對話的這種情況下,Qt提供了一個別名,qApp。
這裡我們舉例說明了我們的新子視窗部件,把它設定為主視窗部件,並且執行這個應用程式。
class MyWidget : public QWidget
{
public:
MyWidget( QWidget *parent=0, const char *name=0 );
};
這裡我們建立了一個新類。因為這個類繼承了QWidget,所以新類是一個視窗部件,並且可以最為一個頂層視窗或者子視窗部件(像第三章裡面的按鈕)。
這個類只有一個成員函式,建構函式(加上從QWidget繼承來的成員函式)。這個建構函式是一個標準的Qt視窗部件建構函式,當你建立視窗部件時,你應該總是包含一個相似的建構函式。
第一個引數是它的父視窗部件。為了生成一個頂層視窗,你指定一個空指標作為父視窗部件。就像你看到的那樣,這個視窗部件預設地被認做是一個頂層視窗。
第二個引數是這個視窗部件的名稱。這個不是顯示在視窗標題欄或者按鈕上的文字。這只是分配給視窗部件的一個名稱,以後可以用來查詢這個視窗部件,並且這裡還有一個方便的除錯功能可以完整地列出視窗部件層次。
MyWidget::MyWidget( QWidget *parent, const char *name )
: QWidget( parent, name )
建構函式的實現從這裡開始。像大多數視窗部件一樣,它把parent和name傳遞給了QWidget的建構函式。
{
setMinimumSize( 200, 120 );
setMaximumSize( 200, 120 );
因為這個視窗部件不知道如何處理重新定義大小,我們把它的最小大小和最大大小設定為相等的值,這樣我們就確定了它的大小。在下一章,我們將演示視窗部件如何響應使用者的重新定義大小事件。
QPushButton *quit = new QPushButton( "Quit", this, "quit" );
quit->setGeometry( 62, 40, 75, 30 );
quit->setFont( QFont( "Times", 18, QFont::Bold ) );
這裡我們建立並設定了這個視窗部件的一個名稱為“quit”的子視窗部件(新視窗部件的父視窗部件是this)。這個視窗部件名稱和按鈕文字沒有關係,只是在這一情況下碰巧相似。
注意quit是這個建構函式中的區域性變數。MyWidget不能跟蹤它,但Qt可以,當MyWidget被刪除的時候,預設地它也會被刪除。這就是為什麼MyWidget不需要一個解構函式的原因。(另外一方面,如果你選擇刪除一個子視窗部件,也沒什麼壞處,這個子視窗部件會自動告訴Qt它即將死亡。)
setGeometry()呼叫和上一章的move()和resize()是一樣的。
connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );
}
因為MyWidget類不知道這個應用程式物件,它不得不連線到Qt的指標,qApp。
一個視窗部件就是一個軟體元件並且它應該儘量少地知道關於它的環境,因為它應該儘可能的通用和可重用。
知道了應用程式的名稱將會打破上述原則,所以在一個元件,比如MyWidget,需要和應用程式物件對話的這種情況下,Qt提供了一個別名,qApp。
int main( int argc, char **argv )
{
QApplication a( argc, argv );
MyWidget w;
w.setGeometry( 100, 100, 200, 120 );
a.setMainWidget( &w );
w.show();
return a.exec();
}
這裡我們舉例說明了我們的新子視窗部件,把它設定為主視窗部件,並且執行這個應用程式。
#include <qapplication.h>
#include <qpushbutton.h>
#include <qfont.h>
class MyWidget : public QWidget
{
public:
MyWidget( QWidget *parent=0, const char *name=0 );
};
MyWidget::MyWidget( QWidget *parent, const char *name )
: QWidget( parent, name )
{
setMinimumSize( 200, 120 );
setMaximumSize( 200, 120 );
QPushButton *quit = new QPushButton( "Quit", this, "quit" );
quit->setGeometry( 62, 40, 75, 30 );
quit->setFont( QFont( "Times", 18, QFont::Bold ) );
connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );
}
int main( int argc, char **argv )
{
QApplication a( argc, argv );
MyWidget w;
w.setGeometry( 100, 100, 200, 120 );
a.setMainWidget( &w );
w.show();
return a.exec();
}
相關文章
- Qt入門(14)——父視窗部件和子視窗部件QT
- Qt入門(16)——組裝視窗部件QT
- Qt入門(19)——自定義視窗部件QT
- QT中 視窗部件的 背景圖片 的設定QT
- Qt視窗居中QT
- QT視窗類QT
- Tkinter (20) 頂層視窗部件 Toplevel
- qt 視窗預設居中QT
- qt視窗居中顯示QT
- Qt TCP (小型聊天視窗)QTTCP
- Go Qt5 建立空白視窗、視窗居中及關閉視窗事件GoQT事件
- QT入門QT
- Qt 佈局管理 - 停靠視窗QT
- QT快速入門QT
- Qt入門(11)——Qt外掛QT
- Qt 設定視窗居中顯示QT
- Qt5:視窗居中顯示QT
- Qt視窗螢幕居中顯示QT
- SQL輕鬆入門(5):視窗函式SQL函式
- AutoCAD快速入門(二):圖形視窗
- 【QT】QT如何讓視窗放置在螢幕正中間QT
- Qt的視窗背景及視窗風格統一與煥膚QT
- Qt+ECharts開發筆記(二):Qt視窗動態調整大小,使ECharts跟隨Qt視窗大小變換QTEcharts筆記
- 利用”視窗小部件“擴充套件 Lotus Symphony 應用套件
- Qt入門(12)——Qt國際化QT
- Qt入門(13)——Qt的呼叫退出QT
- Qt入門(20)——Qt模組簡介QT
- Qt中設定視窗居中顯示QT
- QT 讓視窗(或控制元件)居中QT控制元件
- SDL3 入門(2):第一個視窗
- Qt Quick 如何入門?QTUI
- Qt入門之概述QT
- Qt學習第四篇(主視窗和ui的使用)QTUI
- qt的無邊框視窗支援拖拽、Aero Snap、視窗陰影等特性QT
- 開源專案 Qt Esay Designer (Qt視窗設計器)QT
- Qt 讓彈出的視窗居中顯示QT
- qt設定視窗在桌面居中顯示QT
- Qt視窗在螢幕上居中顯示QT