1. 程式人生 > >Qt之佈局管理——(1)基本佈局管理

Qt之佈局管理——(1)基本佈局管理

Qt提供的佈局類以及他們之間的繼承關係(如下圖):

clip_image002

常用到的佈局類有:QHBoxLayout、QVBoxLayout、QGridLayout三種,分別是水平排列布局、垂直排列布局、表格排列布局。

常用的方法有addWidget()和addLayout()。addWidget()用於在佈局中插入控制元件,addLayout()用於在佈局中插入子佈局。

在佈局管理中還常用到setMargin()用於設定邊距,setSpacing()用於設定控制元件間距。

setColumnStretch()用於設定列的佔空比。

示例:實現如下圖的佈局

image

basiclayout.h

  1. #ifndef BASICLAYOUT_H
  2. #define BASICLAYOUT_H
  3. #include <QtGui>
  4. class BasicLayout : public QDialog  
  5. {  
  6.     Q_OBJECT  
  7. public:  
  8.     BasicLayout(QWidget *parent = 0, Qt::WFlags flags = 0);  
  9.     ~BasicLayout();  
  10. private:  
  11.     QLabel *labUser;  
  12.     QLabel *labName;  
  13.     QLabel *labSex;  
  14.     QLabel *labDepartment;  
  15.     QLabel *labAge;  
  16.     QLabel *labRemark;  
  17.     QLineEdit *edtUser;  
  18.     QLineEdit *edtName;  
  19.     QComboBox *cbbSex;  
  20.     QTextEdit *edtDepartment;  
  21.     QLineEdit *edtAge;  
  22.     QLabel *labHead;  
  23.     QLabel *labIcon;  
  24.     QLabel *labIndividual;  
  25.     QPushButton *btnChange;  
  26.     QTextEdit *edtIndividual;  
  27.     QPushButton *btnOk;  
  28.     QPushButton *btnCancel;  
  29. };  
  30. #endif // BASICLAYOUT_H

basiclayout.cpp

  1. #include "basiclayout.h"
  2. BasicLayout::BasicLayout(QWidget *parent, Qt::WFlags flags)  
  3.     : QDialog(parent, flags)  
  4. {  
  5.     setWindowTitle(tr("User Infomation"));  
  6.     //Left Loyout:
  7.     labUser = new QLabel(tr("User Name:"));  
  8.     labName = new QLabel(tr("Name;"));  
  9.     labSex = new QLabel(tr("Sex:"));  
  10.     labDepartment = new QLabel(tr("Department:"));  
  11.     labAge = new QLabel(tr("Age:"));  
  12.     labRemark = new QLabel(tr("Remark:"));  
  13.     labRemark->setFrameStyle(QFrame::Panel|QFrame::Sunken);  
  14.     edtUser = new QLineEdit;  
  15.     edtName = new QLineEdit;  
  16.     cbbSex = new QComboBox;  
  17.     cbbSex->insertItem(0,tr("Female"));  
  18.     cbbSex->insertItem(1,tr("Male"));  
  19.     edtDepartment = new QTextEdit;  
  20.     edtAge = new QLineEdit;  
  21.     QGridLayout *leftLayou = new QGridLayout;  
  22.     int col_Lab = 0;  
  23.     int col_Content = 1;  
  24.     leftLayou->addWidget(labUser,0,col_Lab);  
  25.     leftLayou->addWidget(edtUser,0,col_Content);  
  26.     leftLayou->addWidget(labName,1,col_Lab);  
  27.     leftLayou->addWidget(edtName,1,col_Content);  
  28.     leftLayou->addWidget(labSex,2,col_Lab);  
  29.     leftLayou->addWidget(cbbSex,2,col_Content);  
  30.     leftLayou->addWidget(labDepartment,3,col_Lab);  
  31.     leftLayou->addWidget(edtDepartment,3,col_Content);  
  32.     leftLayou->addWidget(labAge,4,col_Lab);  
  33.     leftLayou->addWidget(edtAge,4,col_Content);  
  34.     leftLayou->addWidget(labRemark,5,col_Lab,1,2);  
  35.     leftLayou->setColumnStretch(0,1);    //設定兩列分別佔有空間的比例
  36.     leftLayou->setColumnStretch(1,3);  
  37.     //Right Layout:
  38.     labHead = new QLabel(tr("Head:"));  
  39.     labIcon = new QLabel;  
  40.     QPixmap m_icon("head.gif");  
  41.     labIcon->resize(m_icon.width(),m_icon.height());  
  42.     labIcon->setPixmap(m_icon);  
  43.     btnChange = new QPushButton(tr("Change"));  
  44.     QHBoxLayout *headLayout = new QHBoxLayout;  
  45.     headLayout->addWidget(labHead);  
  46.     headLayout->addWidget(labIcon);  
  47.     headLayout->addWidget(btnChange);  
  48.     headLayout->setSpacing(20);  //控制元件間距為20畫素
  49.     labIndividual = new QLabel(tr("Individual:"));  
  50.     edtIndividual = new QTextEdit;  
  51.     QVBoxLayout *rightLayout = new QVBoxLayout;  
  52.     rightLayout->addLayout(headLayout);  
  53.     rightLayout->addWidget(labIndividual);  
  54.     rightLayout->addWidget(edtIndividual);  
  55.     rightLayout->setMargin(10);  
  56.     //Bottom Layout:
  57.     btnOk = new QPushButton(tr("Ok"));  
  58.     btnCancel = new QPushButton(tr("Cancel"));  
  59.     QHBoxLayout *bottomLayout = new QHBoxLayout;  
  60.     bottomLayout->addStretch();  //新增一個佔位符
  61.     bottomLayout->addWidget(btnOk);  
  62.     bottomLayout->addWidget(btnCancel);  
  63.     bottomLayout->setSpacing(10);  
  64.     //Main Layout:
  65.     QGridLayout *mainLayout = new QGridLayout(this);  
  66.     mainLayout->addLayout(leftLayou,0,0);  
  67.     mainLayout->addLayout(rightLayout,0,1);  
  68.     mainLayout->addLayout(bottomLayout,1,0,1,2);  
  69.     mainLayout->setMargin(15);  
  70.     mainLayout->setSpacing(10);  
  71.     mainLayout->setSizeConstraint(QLayout::SetFixedSize);    //設定對話方塊大小固定,不允許使用者改變
  72. }  
  73. BasicLayout::~BasicLayout()  
  74. {  
  75. }  

setFrameStyle()是QFrame的方法,引數以或的方式設定控制元件的風格,引數1(QFrame::Shape)用於設定控制元件的形狀,引數2(QFrame::Shadow)用於設定控制元件俺的陰影。

形狀有:NoFrame、Panel、Box、HLine、VLine、WinPanel 6種;陰影有:Plain、Raised、Sunken三種。

相關推薦

Qt佈局管理——1基本佈局管理

Qt提供的佈局類以及他們之間的繼承關係(如下圖): 常用到的佈局類有:QHBoxLayout、QVBoxLayout、QGridLayout三種,分別是水平排列布局、垂直排列布局、表格排列布局。 常用的方法有addWidget()和addLayout()。addW

QT中國象棋1

因為一直喜歡下象棋,今天動手實踐一下用QT實現中國象棋!先看下效果。。。。。 1.我採用c++實現的,有以下幾個類: 棋盤類 #include <QWidget> #include <QPainter> #include "stone.h" class Bo

java8lambda表達式1-基本語法

com nal called new collect starting 代碼 face 使用 參考:http://www.cnblogs.com/andywithu/p/7344507.html lambda表達式,即帶有參數的表達式,為更清晰地理解lambda表達式,先看

Openfire分析三:ConnectionManager 連接管理1

max .com exc tco active eat cond hlist 觀察 Openfire是怎麽實現連接請求的?   XMPPServer.start()方法,完成Openfire的啟動。但是,XMPPServer.start()方法中,並沒有提及如何監聽端口,

基於Visual C++Windows核心程式設計程式碼分析1實現裝置管理器列舉裝置

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

ASP.NET MVC 實現頁落網資源分享網站+充值管理+後臺管理1資料庫設計

    本文主要講解本專案網站所應用到的知識點,及資料庫的相關設計: 一、知識點     (1)本專案主要採取ASP.NET MVC的程式設計模式,相信你已經瞭解到了MVC的具體含義是什麼,這裡不再贅述,有不瞭解的朋友,可以先

linux系統管理1 核心編譯選項檢視

三個方法 proc檔案系統 ubunut debain 紅帽等 proc檔案系統 /proc/config.gz This file shows you the compile-time configuration settings for the kernel (gzip compr

資料結構連結串列1:單鏈表基本操作

1.前言 1.1宣告 文章中的文字可能存在語法錯誤以及標點錯誤,請諒解; 如果在文章中發現程式碼錯誤或其它問題請告知,感謝! 2.關於連結串列 2.1什麼是連結串列 連結串列可以看成一種在物理儲存單元上的非連續、非順序儲存的資料結構,該資

任督二脈進程管理1

動態 define 發送信號 aps 無限 _exit 情況 遞歸 技術 進程生命周期,進程生命周期創建、退出、停止,以及僵屍進程是什麽意思。 一、進程的定義 進程--線程。進程是資源分配單位;搞清楚進程就是搞清楚進程資源情況。進程控制塊PCB是OS的通用叫法。task_s

Linux C編程十九1 libevent基本概念

通信 == socket通信 驅動 1.4 event http linu make 一、libevent是幹什麽的 1. 開源的庫, 提高開發效率 封裝了socket通信 封裝了IO多路轉接 2. 精簡, 專註於網絡, 性能高 3

backbone入門系列1基本組成部分

tle doctype syn 方法 1.3 服務器 行為 java code 一,首先backbone有以下組成部分:Events:事件驅動模塊 Model:數據模型 Collection:模型集合器 Router:路由器(對應hash值) History:開啟歷史管理

C++代碼坦克大戰1

過程 核心 形狀 正方 遍歷 public 開始 www 保存 對坦克大戰情有獨鐘是因為大學時候第一次參加程序設計比賽就做的這個遊戲。當時用的語言是Java,那個比賽讓我悟出了面向對象的強大之處,我也是從那時開始接觸設計模式的。對我而言,坦克大戰有著非同尋常的意義,所以

《大話設計模式》——讀後感 8好菜每回味不同——建造者模式基礎案例1

ted builds src ret 分離 args 類圖 rec 方法 建造者模式:是將一個復雜的對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。 建造者模式通常包括下面幾個角色: 1. builder:給出一個抽象接口,以規範產品對象的各個組成成分的

2017前端面試題Css篇1

margin 沒有 width ati clas 經驗 visible import tom 1 . CSS 屬性是否區分大小寫? 答:不區分。 HTML,CSS都對大小寫不敏感,但為了更好的可讀性和團隊協作一般都小寫,而在XHTML 中元素名稱和屬性是必須小寫的。

2017前端面試題Html篇1

utf doctype clas 停止 要求 驅動 抓取 -c 顯示錯誤 1 . doctype(文檔類型) 的作用是什麽? 對文檔進行有效性驗證: 它告訴用戶代理和校驗器這個文檔是按照什麽DTD 寫的。這個動作是被動的, 每次頁面加載時,瀏覽器並不會下載DTD

2017前端面試題Js篇1

load urn lis property eat hub bind tlist 方法的參數 1 . 請解釋事件代理 (event delegation) 當需要對很多元素添加事件的時,可以通過將事件添加到它們的父節點通過委托來觸發處理函數。其中利用到了瀏覽器的事件冒

Linux學習-文件管理1

詳細信息 src 最長 mod 展開 重新啟動 upper 填充 虛擬 文件管理——當你使用Linux時,大部分時間都會和文件打交道,我們需要了解基本的文件操作,如創建文件、刪除文件、復制文件、重命名文件以及為文件創建鏈接等。目錄 文件的組成 目錄結構

Scala語言學習環境安裝1

下載 erlang 利用 ons 拆分 直接 線程模型 新功能 scala ==> Scala語言簡介 --> Scala編程語言抓住了很多開發者的眼球。如果你粗略瀏覽Scala的網站,你會覺得Scala是一種純粹的面向對象編程語言,而又無縫地結合

Linux學習路--Mariadb3基本使用操作【20】---20180123

result run page 提高 進行 組成 varchar alias pan 一、MariaDB程序1、MariaDB的程序組成Client mysql:CLI交互式客戶端程序 mysqldump,mysqladmin...Server mysq

python全棧系列---tornado初識1

start 存在 IT span imp 基礎 復用 -- 不常用 import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(s