Qt之佈局管理——(1)基本佈局管理
Qt提供的佈局類以及他們之間的繼承關係(如下圖):
常用到的佈局類有:QHBoxLayout、QVBoxLayout、QGridLayout三種,分別是水平排列布局、垂直排列布局、表格排列布局。
常用的方法有addWidget()和addLayout()。addWidget()用於在佈局中插入控制元件,addLayout()用於在佈局中插入子佈局。
在佈局管理中還常用到setMargin()用於設定邊距,setSpacing()用於設定控制元件間距。
setColumnStretch()用於設定列的佔空比。
示例:實現如下圖的佈局
basiclayout.h
-
#ifndef BASICLAYOUT_H
- #define BASICLAYOUT_H
- #include <QtGui>
- class BasicLayout : public QDialog
- {
- Q_OBJECT
- public:
- BasicLayout(QWidget *parent = 0, Qt::WFlags flags = 0);
- ~BasicLayout();
- private:
- QLabel *labUser;
- QLabel *labName;
- QLabel *labSex;
-
QLabel *labDepartment;
- QLabel *labAge;
- QLabel *labRemark;
- QLineEdit *edtUser;
- QLineEdit *edtName;
- QComboBox *cbbSex;
- QTextEdit *edtDepartment;
- QLineEdit *edtAge;
- QLabel *labHead;
- QLabel *labIcon;
- QLabel *labIndividual;
- QPushButton *btnChange;
-
QTextEdit *edtIndividual;
- QPushButton *btnOk;
- QPushButton *btnCancel;
- };
- #endif // BASICLAYOUT_H
basiclayout.cpp
- #include "basiclayout.h"
- BasicLayout::BasicLayout(QWidget *parent, Qt::WFlags flags)
- : QDialog(parent, flags)
- {
- setWindowTitle(tr("User Infomation"));
- //Left Loyout:
- labUser = new QLabel(tr("User Name:"));
- labName = new QLabel(tr("Name;"));
- labSex = new QLabel(tr("Sex:"));
- labDepartment = new QLabel(tr("Department:"));
- labAge = new QLabel(tr("Age:"));
- labRemark = new QLabel(tr("Remark:"));
- labRemark->setFrameStyle(QFrame::Panel|QFrame::Sunken);
- edtUser = new QLineEdit;
- edtName = new QLineEdit;
- cbbSex = new QComboBox;
- cbbSex->insertItem(0,tr("Female"));
- cbbSex->insertItem(1,tr("Male"));
- edtDepartment = new QTextEdit;
- edtAge = new QLineEdit;
- QGridLayout *leftLayou = new QGridLayout;
- int col_Lab = 0;
- int col_Content = 1;
- leftLayou->addWidget(labUser,0,col_Lab);
- leftLayou->addWidget(edtUser,0,col_Content);
- leftLayou->addWidget(labName,1,col_Lab);
- leftLayou->addWidget(edtName,1,col_Content);
- leftLayou->addWidget(labSex,2,col_Lab);
- leftLayou->addWidget(cbbSex,2,col_Content);
- leftLayou->addWidget(labDepartment,3,col_Lab);
- leftLayou->addWidget(edtDepartment,3,col_Content);
- leftLayou->addWidget(labAge,4,col_Lab);
- leftLayou->addWidget(edtAge,4,col_Content);
- leftLayou->addWidget(labRemark,5,col_Lab,1,2);
- leftLayou->setColumnStretch(0,1); //設定兩列分別佔有空間的比例
- leftLayou->setColumnStretch(1,3);
- //Right Layout:
- labHead = new QLabel(tr("Head:"));
- labIcon = new QLabel;
- QPixmap m_icon("head.gif");
- labIcon->resize(m_icon.width(),m_icon.height());
- labIcon->setPixmap(m_icon);
- btnChange = new QPushButton(tr("Change"));
- QHBoxLayout *headLayout = new QHBoxLayout;
- headLayout->addWidget(labHead);
- headLayout->addWidget(labIcon);
- headLayout->addWidget(btnChange);
- headLayout->setSpacing(20); //控制元件間距為20畫素
- labIndividual = new QLabel(tr("Individual:"));
- edtIndividual = new QTextEdit;
- QVBoxLayout *rightLayout = new QVBoxLayout;
- rightLayout->addLayout(headLayout);
- rightLayout->addWidget(labIndividual);
- rightLayout->addWidget(edtIndividual);
- rightLayout->setMargin(10);
- //Bottom Layout:
- btnOk = new QPushButton(tr("Ok"));
- btnCancel = new QPushButton(tr("Cancel"));
- QHBoxLayout *bottomLayout = new QHBoxLayout;
- bottomLayout->addStretch(); //新增一個佔位符
- bottomLayout->addWidget(btnOk);
- bottomLayout->addWidget(btnCancel);
- bottomLayout->setSpacing(10);
- //Main Layout:
- QGridLayout *mainLayout = new QGridLayout(this);
- mainLayout->addLayout(leftLayou,0,0);
- mainLayout->addLayout(rightLayout,0,1);
- mainLayout->addLayout(bottomLayout,1,0,1,2);
- mainLayout->setMargin(15);
- mainLayout->setSpacing(10);
- mainLayout->setSizeConstraint(QLayout::SetFixedSize); //設定對話方塊大小固定,不允許使用者改變
- }
- BasicLayout::~BasicLayout()
- {
- }
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
java8之lambda表達式(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學習之路--Mariadb(3)基本使用操作【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