Qt入門(17)——組裝複雜的控制元件
下面是如何把兩個視窗部件封裝成一個新的元件。首先,我們使用一個自定義的視窗部件作為一個子視窗部件。
解釋:
LCDRange視窗部件是一個沒有任何API的視窗部件。它只有一個建構函式。這種視窗部件不是很有用,所以我們一會兒會加入一些API。
這裡直接利用了第五章裡面的MyWidget的建構函式。唯一的不同是按鈕被省略了並且這個類被重新命名了。
MyWidget也是除了一個建構函式之外沒有包含任何API。
這個按鈕被放在LCDRange中,這樣我們就有了一個“Quit”按鈕和許多LCDRange物件。
QGrid *grid = new QGrid( 4, this );
我們建立了一個四列的QGrid物件。這個QGrid視窗部件可以自動地把自己地子視窗部件排列到行列中,你可以指定行和列的數量,並且QGrid可以發現它的新子視窗部件並且把它們安放到網格中。
for( int r = 0 ; r < 4 ; r++ )
for( int c = 0 ; c < 4 ; c++ )
(void)new LCDRange( grid );
四行,四列。
我們建立了一個4*4個LCDRanges,所有這些都是這個grid物件的子視窗部件。這個QGrid視窗部件會安排它們。
}
這就是全部了。
#include <qapplication.h>
#include <qpushbutton.h>
#include <qslider.h>
#include <qlcdnumber.h>
#include <qfont.h>
#include <qvbox.h>
#include <qgrid.h>
class LCDRange : public QVBox
{
public:
LCDRange( QWidget *parent=0, const char *name=0 );
};
LCDRange::LCDRange( QWidget *parent, const char *name )
: QVBox( parent, name )
{
QLCDNumber *lcd = new QLCDNumber( 2, this, "lcd" );
QSlider * slider = new QSlider( Horizontal, this, "slider" );
slider->setRange( 0, 99 );
slider->setValue( 0 );
connect( slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)) );
}
class MyWidget : public QVBox
{
public:
MyWidget( QWidget *parent=0, const char *name=0 );
};
MyWidget::MyWidget( QWidget *parent, const char *name )
: QVBox( parent, name )
{
QPushButton *quit = new QPushButton( "Quit", this, "quit" );
quit->setFont( QFont( "Times", 18, QFont::Bold ) );
connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );
QGrid *grid = new QGrid( 4, this );
for( int r = 0 ; r < 4 ; r++ )
for( int c = 0 ; c < 4 ; c++ )
(void)new LCDRange( grid );
}
int main( int argc, char **argv )
{
QApplication a( argc, argv );
MyWidget w;
a.setMainWidget( &w );
w.show();
return a.exec();
}
解釋:
class LCDRange : public QVBox
{
public:
LCDRange( QWidget *parent=0, const char *name=0 );
};
LCDRange視窗部件是一個沒有任何API的視窗部件。它只有一個建構函式。這種視窗部件不是很有用,所以我們一會兒會加入一些API。
LCDRange::LCDRange( QWidget *parent, const char *name )
: QVBox( parent, name )
{
QLCDNumber *lcd = new QLCDNumber( 2, this, "lcd" );
QSlider * slider = new QSlider( Horizontal, this, "slider" );
slider->setRange( 0, 99 );
slider->setValue( 0 );
connect( slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)) );
}
這裡直接利用了第五章裡面的MyWidget的建構函式。唯一的不同是按鈕被省略了並且這個類被重新命名了。
class MyWidget : public QVBox
{
public:
MyWidget( QWidget *parent=0, const char *name=0 );
};
MyWidget也是除了一個建構函式之外沒有包含任何API。
MyWidget::MyWidget( QWidget *parent, const char *name )
: QVBox( parent, name )
{
QPushButton *quit = new QPushButton( "Quit", this, "quit" );
quit->setFont( QFont( "Times", 18, QFont::Bold ) );
connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );
這個按鈕被放在LCDRange中,這樣我們就有了一個“Quit”按鈕和許多LCDRange物件。
QGrid *grid = new QGrid( 4, this );
我們建立了一個四列的QGrid物件。這個QGrid視窗部件可以自動地把自己地子視窗部件排列到行列中,你可以指定行和列的數量,並且QGrid可以發現它的新子視窗部件並且把它們安放到網格中。
for( int r = 0 ; r < 4 ; r++ )
for( int c = 0 ; c < 4 ; c++ )
(void)new LCDRange( grid );
四行,四列。
我們建立了一個4*4個LCDRanges,所有這些都是這個grid物件的子視窗部件。這個QGrid視窗部件會安排它們。
}
這就是全部了。
相關文章
- Qt入門(16)——組裝視窗部件QT
- 複雜物件的組裝與建立——建造者模式(三)物件模式
- 複雜物件的組裝與建立——建造者模式(二)物件模式
- 複雜物件的組裝與建立——建造者模式(一)物件模式
- QT入門QT
- Qt入門(13)——Qt的呼叫退出QT
- 深入理解建造者模式 ——組裝複雜的例項模式
- Qt入門(18)——使用訊號和槽連線控制元件QT控制元件
- QT快速入門QT
- Qt入門(11)——Qt外掛QT
- Qt入門(12)——Qt國際化QT
- Qt入門(20)——Qt模組簡介QT
- Qt Quick 如何入門?QTUI
- Qt入門之概述QT
- Qt入門(9)——Qt中的執行緒支援QT執行緒
- QT常用控制元件(三)——自定義控制元件封裝QT控制元件封裝
- 設計模式系列之建造者模式(Builder Pattern)——複雜物件的組裝與建立設計模式UI物件
- javascript快速入門17--事件JavaScript事件
- VUE 實現 Studio 管理後臺(十二):新增輸入組合,複雜輸入,輸入框 Input 系列Vue
- QT控制元件大全QT控制元件
- Qt快速入門系列教程目錄QT
- Qt入門(3)——訊號和槽QT
- Qt入門(10)——除錯技術QT除錯
- Qt入門(15)——使用視窗部件QT
- Redis 入門 - 2(雜湊 + 列表)Redis
- 複雜度分析的套路及常見的複雜度複雜度
- Qt入門(19)——自定義視窗部件QT
- 如何用 Swift 做一個複雜的載入動畫Swift動畫
- QT開發快速入門-教程1:搭建QT開發環境QT開發環境
- MySQL 入門(5):複製MySql
- Windows入門雜亂無章版Windows
- MySQL 8 複製(八)——組複製安裝部署MySql
- 複雜「場景」資料匯入匯出
- 榮耀分散式路由兩種組網方法 複雜家庭組網一鍵搞定分散式路由
- JavaScript 設計模式 :用組合模式寫出複雜元件JavaScript設計模式元件
- 《MySQL 入門教程》第 17 篇 MySQL 變數MySql變數
- Python學習之路17-Django入門PythonDjango
- XML入門指南(17)XML HTTP 請求(轉)XMLHTTP