網(wǎng)站建設(shè)的具體過程品牌關(guān)鍵詞排名優(yōu)化怎么做
目錄
一、前言
二:相關(guān)類
三、水平、垂直、網(wǎng)格和表單布局
四、尺寸策略
一、前言
??????? 在實(shí)際項(xiàng)目開發(fā)中,經(jīng)常需要使用到布局,讓控件自動(dòng)排列,不僅節(jié)省控件還易于管控。Qt布局系統(tǒng)提供了一種簡(jiǎn)單而強(qiáng)大的方式來自動(dòng)布局小部件中的子小部件,以確保它們充分利用可用空間。
???????? 所有QWidget子類都可以使用setLayout()設(shè)置布局來管理它們的子類,添加了Layout之后,Layout將承擔(dān)對(duì)子部件的定位、窗口尺寸、字體大小、文本內(nèi)容、隱藏顯示和移除子部件的任務(wù)。
二:相關(guān)類
????????Qt的布局類十分豐富,可以代碼創(chuàng)建也可以直接從Desigin里面拉取,直接把需要布局的小部件拉進(jìn)去查看效果,避免了通常在用戶界面開發(fā)中涉及的編譯、鏈接和運(yùn)行周期。
- QLayout???????????????????????????????? 幾何圖形管理器的基類
- QBoxLayout????????????????????????? 水平或垂直排列子部件的父類
- QHBoxLayout??????????????????????? 水平排列小部件
- QVBoxLayout??????????????????????? 垂直排列小部件
- QGridLayout???????????????????????? 在網(wǎng)格中布局小部件
- QFormLayout??????????????????????? 管理輸入小部件的表單及其相關(guān)標(biāo)簽布局類
- QStackedLayout??????????????????? 一次只能看到一個(gè)小部件的小部件堆棧
- QGraphicsAnchor???????????????? QGraphicsAnchorLayout布局小部件之間的錨點(diǎn)
- QGraphicsAnchorLayout????? 可以在圖形視圖中將小部件固定在一起的布局
- QGroupBox?????????????????????????? 帶標(biāo)題的組框框架
- QLayoutItem????????????????????????? QLayout操作的抽象項(xiàng)
- QSizePolicy?????????????????????????? 描述水平和垂直調(diào)整大小策略的布局屬性
- QSpacerItem???????????????????????? 局中的空白空間
- QButtonGroup?????????????????????? 組織按鈕小部件組的容器類
- QStackedWidget?????????????????? 一次只能看到一個(gè)小部件的小部件堆棧
- QWidgetItem????????????????????????? 表示小部件的布局項(xiàng)
三、水平、垂直、網(wǎng)格和表單布局
?????????為小部件提供良好布局的最簡(jiǎn)單方法是使用內(nèi)置的布局管理器:QHBoxLayout、QVBoxLayout、QGridLayout和QFormLayout。這些類繼承自QLayout,而QLayout又繼承自QObject(而不是QWidget)。它們負(fù)責(zé)一組小部件的幾何管理。要?jiǎng)?chuàng)建更復(fù)雜的布局,可以將布局管理器相互嵌套。
1、QHBoxLayout在水平行中從左到右布局小部件。
QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QPushButton *button2 = new QPushButton("Two");
QPushButton *button3 = new QPushButton("Three");
QPushButton *button4 = new QPushButton("Four");
QPushButton *button5 = new QPushButton("Five");QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
layout->addWidget(button5);window->setLayout(layout);
window->show();
2、QVBoxLayout在水平行中從上到下布局小部件。
QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QPushButton *button2 = new QPushButton("Two");
QPushButton *button3 = new QPushButton("Three");
QPushButton *button4 = new QPushButton("Four");
QPushButton *button5 = new QPushButton("Five");QVBoxLayout *layout = new QVBoxLayout ;
layout->addWidget(button1);
layout->addWidget(button2);
layout->addWidget(button3);
layout->addWidget(button4);
layout->addWidget(button5);window->setLayout(layout);
window->show();
????????
3、QGridLayout二維網(wǎng)格中布局小部件。小部件可以占用多個(gè)單元格,這需要在添加的時(shí)候設(shè)置rowSpan參數(shù),在Desigin設(shè)計(jì)師界面默認(rèn)都是占一個(gè),占多格需要代碼實(shí)現(xiàn)。
QWidget *window = new QWidget;
QPushButton *btn1 = new QPushButton();
btn1->setText("one");
QPushButton *btn2 = new QPushButton();
btn2->setText("two");
QPushButton *btn3 = new QPushButton();
btn3->setText("three");
QPushButton *btn4 = new QPushButton();
btn4->setText("four");
QPushButton *btn5 = new QPushButton();
btn5->setText("five");QGridLayout *layout = new QGridLayout;
layout->addWidget(btn1,0,0,1,1);
layout->addWidget(btn2,0,1,1,1);
layout->addWidget(btn3,1,0,1,2);
layout->addWidget(btn4,2,0,1,1);
layout->addWidget(btn5,2,1,1,1);window->setLayout(layout);
window->show();
?4、QFormLayout以兩列布局方式布局小部件腳本標(biāo)簽-字段樣式。
QWidget *window = new QWidget;
QPushButton *button1 = new QPushButton("One");
QLineEdit *lineEdit1 = new QLineEdit();
QPushButton *button2 = new QPushButton("Two");
QLineEdit *lineEdit2 = new QLineEdit();
QPushButton *button3 = new QPushButton("Three");
QLineEdit *lineEdit3 = new QLineEdit();QFormLayout*layout = new QFormLayout;
layout->addRow(button1, lineEdit1);
layout->addRow(button2, lineEdit2);
layout->addRow(button2, lineEdit3);window->setLayout(layout);
window->show();
?
??????? 我們?cè)趯?shí)例化子部件的時(shí)候并沒有傳遞父類指針,因?yàn)樗麄兗尤氲絃ayout之后,會(huì)自動(dòng)被重新設(shè)置父類,這樣會(huì)方便布局管理它們。這個(gè)父類是承載布局的Widget,而不是Layout。
四、尺寸策略
??????? 我們添加到布局的這些小部件QLabel、QLineEdit、QPushButton等都是繼承于Widget,這些小部件都帶著父類的sizeHint和sizePolicy策略。sizeHint保存小部件默認(rèn)的推薦大小,sizePolicy保存縮放策略。
1、所有的小部件都是根據(jù)sizeHint和sizePolicy初始分配占據(jù)的空間大小。
2、水平伸展和垂直伸展默認(rèn)為0,當(dāng)設(shè)置了拉伸因子,會(huì)按照比例分配空間。
3、優(yōu)先分配設(shè)置了擴(kuò)展大小策略的小部件。
4、當(dāng)分配的空間小于小部件設(shè)置的最小范圍,將分配小部件所需的最小大小。這個(gè)時(shí)候會(huì)出現(xiàn)小部件重疊在一起的情況。
5、當(dāng)分配的空間大于小部件設(shè)置的最大范圍,只會(huì)分配小部件所需的最大大小。
不設(shè)置拉伸和設(shè)置水平拉伸因子為1、2、3。

