qt利用QSplitter任意拆分窗口
一個QSplitter是一個可以包含其他控件的控件,這些控件被一個分隔條隔開,托拽這個分隔條,可以改變splitter的子控件的大小。
QSplitter控件經(jīng)常做為布局管理器使用,給用戶提供更多的界面控制。
QSplitter 繼承自QFrame,而QFrame又繼承自QWidget,這點很重要。
對于使用QSplitter拆分窗口:
1)新建一個QSplitter,就意味著新建了一個QWidget
2)不同的QSplitter對象通過指定父子關(guān)系來完成嵌套(劃分窗口)
3)QSplitter可以放置到你指定的任何窗口內(nèi)
實例:
實現(xiàn)功能:使用QSplitter實現(xiàn)分割窗口功能,整個對話框由四個窗口組成,各個窗口之間的大小可以任意拖拽來改變。
步驟:
1. ?使用Qt Creater新建Gui應(yīng)用程序,名稱為QSplitter,基類為“QMainWindow”,取消“創(chuàng)建界面”按鈕。
2. ?在main.cpp中輸入下列代碼。
#include "mainwindow.h" #include <QApplication> #include <QSplitter> #include <QTextCodec> #include <QTextEdit> #include <QObject>int main(int argc, char *argv[]) {QApplication a(argc, argv);//MainWindow w;//w.show();QFont font("ZYSong18030" , 12);a.setFont(font);QSplitter *splitterMain = new QSplitter(Qt::Horizontal, 0); //新建主分割窗口,水平分割QTextEdit *textLeft = new QTextEdit(QObject::tr("左部件"),splitterMain);textLeft->setAlignment(Qt::AlignCenter);QSplitter *splitterRight = new QSplitter(Qt::Vertical, splitterMain); //右分割窗口,并以主分割窗口作為父窗口splitterRight->setOpaqueResize(false);QTextEdit *textUp = new QTextEdit(QObject::tr("上部件"),splitterRight);textUp->setAlignment(Qt::AlignCenter);QTextEdit *textMiddle = new QTextEdit(QObject::tr("中間部件"),splitterRight);textMiddle->setAlignment(Qt::AlignCenter);QTextEdit *textBottom = new QTextEdit(QObject::tr("底部部件"),splitterRight);textBottom->setAlignment(Qt::AlignCenter);splitterMain->setStretchFactor(1,1);splitterMain->setWindowTitle(QObject::tr("分割窗口"));splitterMain->show();return a.exec(); }3. ?點擊運行按鈕,效果圖如下:
程序中的部分函數(shù)講解:
1. ?QFont font("ZYSong18030" , 12); ? ??a.setFont(font); ?這兩句代碼用于指定顯示的字體。
我也可以根據(jù)需要,這樣來寫:?QFont font("楷體" , 18,QFont::Bold); ??a.setFont(font); ? 此時便是楷體字體,字號為18,粗體顯示。
效果如下:
2. ?QSplitter *splitterMain = new QSplitter(Qt::Horizontal, 0); ? ?新建一個QSplitter類對象,作為主分割窗口,并且設(shè)定此窗口為水平分割窗口。
QTextEdit *textLeft = new QTextEdit(QObject::tr("左部件"),splitterMain); ?? 新建一個QTextEdit類對象,并將其插入主分割窗口。
textLeft->setAlignment(Qt::AlignCenter); ? ?設(shè)置TextEdit對象中文本的對齊方式。
水平對齊方式有:
Constant ? ? ? ? ? ? ? ? ??Value? ? ? ? ? ??Description
Qt::AlignLeft ? ? ? ? ? ?0x0001 ? ? ? ? ??Aligns with the left edge.
Qt::AlignRight ? ? ? ? ?0x0002 ? ? ? ? ?Aligns with the right edge.
Qt::AlignHCenter ? ??0x0004 ? ? ? ? ?Centers horizontally in the available space.
Qt::AlignJustify ? ? ? ?0x0008 ? ? ? ? ?Justifies the text in the available space.
垂直對齊方式有:
Constant? ? ? ? ? ? ? ? ? ?Value?? ? ??Description
Qt::AlignTop ? ? ? ? ? ??0x0020 ? ??Aligns with the top.
Qt::AlignBottom ? ? ? ?0x0040 ? ??Aligns with the bottom.
Qt::AlignVCenter ? ? ?0x0080 ? ? Centers vertically in the available space.
Qt::AlignBaseline ? ??0x0100 ? ??Aligns with the baseline.
QSplitter *splitterRight = new QSplitter(Qt::Vertical, splitterMain); ? ?新建一個QSplitter類對象,作為右分割窗口,并以主分割窗口作為父窗口。設(shè)定分割窗口為垂直分割窗口。
3. ?splitterRight->setOpaqueResize(true); ?設(shè)定在拖拽分割條時,是否實時更新。若為true,則實時更新;否則在拖拽時顯示一條虛線。
splitterRight->setOpaqueResize(true);效果如下:(注意觀察分割條的顏色)
splitterRight->setOpaqueResize(false);效果如下:(注意觀察分割條的顏色)
4. ?splitterMain->setStretchFactor(1,1); ?此函數(shù)用于設(shè)定:控件是否可伸縮。第一個參數(shù)用于指定控件的序號。第二個函數(shù)大于0時,表示控件可伸縮,小于0時,表示控件不可伸縮。
splitterMain->setStretchFactor(1,1); 效果如下:(注意觀察中間的垂直分割條)
splitterMain->setStretchFactor(1,0); 效果如下:(注意觀察中間的垂直分割條)
總結(jié)
以上是生活随笔為你收集整理的qt利用QSplitter任意拆分窗口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 博弈论(Game Theory) - 0
- 下一篇: foreach的工作原理和深拷贝、浅拷贝