畢業(yè)設(shè)計(jì)指導(dǎo)網(wǎng)站開發(fā)企業(yè)如何做網(wǎng)絡(luò)推廣
最近在學(xué)習(xí)一些關(guān)于Qt的新知識(shí),今天來講述下我學(xué)習(xí)到的窗口分割,如果有不正確的,大家可以指正哦~
首先,先看一下實(shí)現(xiàn)之后的簡(jiǎn)單效果吧!省的說的天花亂墜,大家卻不知道說的是哪個(gè)部分。
功能實(shí)現(xiàn)
整體demo的核心是分割窗口類:QSplitter。
在Qt中分割窗口QSplitter可以靈活分割窗口的布局,也經(jīng)常用在類似于文件資源管理器的窗口設(shè)計(jì)中。
水平分割
新建一個(gè)QSplitter類對(duì)象,作為主分割窗口,設(shè)定此窗口的分割方式是:水平
QSplitter *splitterMain = new QSplitter(Qt::Horizontal, 0);
代碼解析:這里的水平、垂直設(shè)置,是指分割開的兩部分橫向展示或者是縱向展示。
例如:
Qt::Horizontal:以縱軸劃分為界限,兩部分內(nèi)容左右分開。
Qt::Vertical:以橫軸劃分為界限,兩部分內(nèi)容上下分開。
分割出兩部分后,可以分別對(duì)這兩部分進(jìn)行內(nèi)容填充,假設(shè),在這里,左側(cè)分割窗口填充一個(gè)QTextEdit編輯框
QTextEdit *textLeft = new QTextEdit(QStringLiteral("左側(cè)窗口"), splitterMain);
新建一個(gè)編輯框控件對(duì)象后,只需要將分割窗口的父指針傳入到QTextEdit對(duì)象中。
在QSplitter中,設(shè)置了分割展示屬性后,插入的對(duì)象默認(rèn)從左到右。
假設(shè),左側(cè)展示一個(gè)QTextEdit對(duì)象,右側(cè)也需要顯示一個(gè)QTextEdit對(duì)象,此時(shí)代碼如下設(shè)置:
QTextEdit *textLeft = new QTextEdit(QStringLiteral("左側(cè)窗口"), splitterMain);
QTextEdit *textRight = new QTextEdit(QStringLiteral("右側(cè)窗口"), splitterMain);
展示效果,如下:
多次分割
上一功能介紹的是如何對(duì)整個(gè)窗口進(jìn)行整體分割,那么,現(xiàn)在又有了一個(gè)新需求,在右側(cè)已經(jīng)分割過的窗口中,再次分割,按照垂直的方式進(jìn)行劃分。
那么,右分割窗口實(shí)現(xiàn):
QSplitter *splitterRight = new QSplitter(Qt::Vertical, splitterMain);
代碼解析:新建一個(gè)QSplitter對(duì)象,作為右分割窗口,并且設(shè)置分割窗口為垂直分割方式,當(dāng)前的父窗口是主分割窗口。
上部分和下部分的對(duì)象一樣,都采用QTextEdit對(duì)象,代碼寫法:
QTextEdit *textUp = new QTextEdit(QStringLiteral("右側(cè)窗口"), splitterRight);
QTextEdit *textBottom = new QTextEdit(QStringLiteral("右下窗口"), splitterRight);
到這里,樣式就與gif效果圖上展示的一致了。
接下來,怎么才能進(jìn)行拖動(dòng)操作呢?
在QSplitter中有一個(gè)setStretchFactor函數(shù),用于設(shè)定可伸縮控件,分別有兩個(gè)參數(shù)。
參數(shù)1:用于指定設(shè)置的控件序號(hào),當(dāng)前控件序號(hào)按照插入的先后次序編號(hào)從0依次遞增。
參數(shù)2:如果當(dāng)前值大于0,表示該控件是可伸縮控件。
splitterMain->setStretchFactor(1, 1);
優(yōu)化設(shè)置:如何讓窗口拖動(dòng)時(shí),實(shí)時(shí)更新顯示?
QSplitter::setOpaqueResize函數(shù)。
參數(shù)true:表示可以實(shí)時(shí)更新顯示;
參數(shù)false:表示拖拽時(shí)只顯示一條灰色的粗線條,只有在拖拽到指定位置后才會(huì)顯示最新的分割,展示效果如下:
有一點(diǎn)需要注意的是:如果給QTextEdit對(duì)象設(shè)置了固定大小之后,如論是否設(shè)置了拖動(dòng)屬性,都是不生效的!
這個(gè)功能實(shí)現(xiàn)超級(jí)簡(jiǎn)答,到這里就講解完畢了。
我是糯諾諾米團(tuán),一名C++開發(fā)程序媛~