1. 背景
最開始只用到了最基本的水平布局 、垂直布局。它的好處就是窗口整體縮放后,控件也自動等比例縮放。? 但是比如水平布局之中的控件寬度比例、垂直布局之中的控件高度比例都是固定的。
平時也不怎么開發界面,最近有個需求,想界面上的控件布局滿足以下:
1)窗口整體縮放后,控件也自動等比例縮放。
2)與很多商業化軟件或者很多IDE一樣,控件支持鼠標拖動調節大小。比如vs中的很多窗口可以拖動來控制它們大小。
環境:vs2019 + Qt 5.15.2
2. 探索
先是在GPT上找答案,搞了一會發現說的不行,搞煩了。最后還是在其他地方查了查資料,自己做了測試,最終匯總整理如下。
界面設計不是特別復雜,所以直接在QT Designer中進行。
?如圖所示,有6個控件元素,
- 其中1(label)、2(listView)組成一個垂直布局?verticalLayout_2
- 其中4(label)、5(tableView)組成一個垂直布局??verticalLayout
- 然后3(tabWidget)、verticalLayout組成 水平分割布局local_H_splitter
- 然后6(plainTextEdit)、local_H_splitter組成垂直分割布局local_V_splitter
- 最后垂直布局?verticalLayout_2、local_V_splitter 組成全局的一個水平分割布局global_H_splitter,見下圖:
- ?最終對整個窗體設置為柵格布局。
現在啟動程序,確實是可以自由拖動調節控件大小了。
但還有個問題,控件大小的初始比例并不理想,想要一個設定的初始比例,見下文。
3. 如何設置QSplitter中控件的初始顯示比例
QtWidgetsApplication1::QtWidgetsApplication1(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);this->setWindowTitle("Resizable Layout Example");ui.local_H_splitter->setSizes(QList<int>() << 400 << 100 ); // 4:1ui.local_H_splitter->widget(0)->setMinimumSize(100, 100); // 分割布局中元素最小尺寸,貌似不起作用ui.local_H_splitter->widget(1)->setMinimumSize(100, 100);ui.local_V_splitter->setSizes(QList<int>() << 700 << 100); // 7:1ui.local_V_splitter->widget(0)->setMinimumSize(100, 100);ui.local_V_splitter->widget(1)->setMinimumSize(100, 100);ui.global_H_splitter->setSizes(QList<int>() << 100 << 700); // 1:7ui.global_H_splitter->widget(0)->setMinimumSize(100, 100);ui.global_H_splitter->widget(1)->setMinimumSize(100, 100);}
如此,便能設置QSplitter中控件的初始顯示比例。