【Qt】之 Splitter分割視窗
中英文對照Splitter handles(分隔條)
一個QSplitter控制元件中可以包含其他控制元件,這些控制元件被一個分隔條隔開,託拽這個分隔條,裡面的控制元件的大小可以改變。QSplitter控制元件經常做為佈局管理器使用,給使用者提供更多的介面控制。
QSplitter控制元件中的子控制元件總是按順序自動並肩排列(或者上下排列)。相鄰的控制元件之間有一個分隔條。下面是建立圖6.7的窗體的程式碼: int main(int argc, char *argv[]) { QApplication app(argc, argv); QTextEdit *editor1 = new QTextEdit; QTextEdit *editor2 = new QTextEdit; QTextEdit *editor3 = new QTextEdit; QSplitter splitter(Qt::Horizontal); splitter.addWidget(editor1); splitter.addWidget(editor2); splitter.addWidget(editor3); ... splitter.show(); return app.exec(); } Figure 6.7. The Splitter application這個例子中的窗體有一個QSplitter控制元件,其中有三個水平排列的QTextEdit控制元件,和佈局管理器不同,QSplitter不但可以排列子控制元件,還有一個可視的外觀,QSplitter控制元件從QWidget繼承,擁有QWidget所有的功能。
Figure 6.8. The Splitter application's widgets 第一次是呼叫rightSplitter的setStretchFactor,把索引值為1的控制元件(textEdit)的拉伸係數設定為1,第二次是呼叫mainSplitter的setStretchFactor(),設定控制元件rightSplitter的拉伸係數為1。這樣,textEdit控制元件就能夠得到儘可能多餘的空間。 當應用程式啟動時,QSplitter根據子控制元件的初始尺寸或者sizeHint合理分配每一個子控制元件的大小。程式中,我們可以呼叫QSplitter::setSizes()改變分隔條的位置。QSplitter還可以儲存當前的狀態,在程式下一次執行時恢復以前的狀態。下面是writeSettings()函式,儲存當前分隔條的狀態: void MailClient::writeSettings() { QSettings settings("Software Inc.", "Mail Client"); settings.beginGroup("mainWindow"); settings.setValue("size", size()); settings.setValue("mainSplitter", mainSplitter->saveState()); settings.setValue("rightSplitter", rightSplitter->saveState()); settings.endGroup(); } 下面是相應的readSettings()函式: void MailClient::readSettings() { QSettings settings("Software Inc.", "Mail Client"); settings.beginGroup("mainWindow"); resize(settings.value("size", QSize(480, 360)).toSize()); mainSplitter->restoreState( settings.value("mainSplitter").toByteArray()); rightSplitter->restoreState( settings.value("rightSplitter").toByteArray()); settings.endGroup(); } Qt Designer也支援QSplitter。把子控制元件放到合適的位置,把他們選中,選擇選單Form|Lay out Horizontally in Splitter或者Form|Lay out Verticallly in Splitter,所選擇的子控制元件就被加入到QSplitter控制元件中。 對QSplitter進行水平或者垂直巢狀可以實現更加複雜的佈局。例如,圖6-9所示的MailClient程式中,就是一個垂直方向的QSplitter控制元件中嵌套了一個水平方向的QSplitter控制元件。 Figure 6.9. The Mail Client application on Mac OS X- QList<QTreeWidgetItem *> items;
- for (int i = 0; i < 10; ++i)
- items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item: %1").arg(i))));
- QTreeWidget* messagesTreeWidget = new QTreeWidget();
- messagesTreeWidget->setColumnCount(1);
- messagesTreeWidget->insertTopLevelItems(0, items);
- for (int i = 0; i < 10; ++i)
- items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item: %1").arg(i))));
- QTreeWidget* foldersTreeWidget = new QTreeWidget();
- foldersTreeWidget->setColumnCount(1);
- foldersTreeWidget->insertTopLevelItems(0, items);
- QTextEdit* textEdit = new QTextEdit();
- textEdit->setText(tr("happy"));
- QSplitter* rightSplitter = new QSplitter(Qt::Vertical);
- rightSplitter->addWidget(messagesTreeWidget); //索引0
- rightSplitter->addWidget(textEdit); //索引1
- rightSplitter->setStretchFactor(1, 1); //索引為X的控制元件拉伸
- QSplitter* mainSplitter = new QSplitter(Qt::Horizontal);
- mainSplitter->addWidget(foldersTreeWidget);
- mainSplitter->addWidget(rightSplitter);
- mainSplitter->setStretchFactor(1, 1);
- setCentralWidget(mainSplitter);
拉伸後
FROM: http://blog.csdn.net/teng_ontheway/article/details/18262827
相關推薦
【Qt】之 Splitter分割視窗
中英文對照Splitter handles(分隔條) 一個QSplitter控制元件中可以包含其他控制元件,這些控制元件被一個分隔條隔開,託拽這個分隔條,裡面的控制元件的大小可以改變。QSplitter控制元件經常做為佈局管理器使用,給使用者提供更多的介面控制。
【Qt 學習之路---安裝篇】QT5.7.1+VS2013軟體開發環境配置
參考:https://blog.csdn.net/liushuiwen101423/article/details/70882534 安裝任務:完成Qt5.7.1載入到VS2013環境下,程式設計執行Qt應用程式,有詳細步驟,最後完成一個空白視窗UI執行顯示1.基本配置PC
【QT】QT從零入門教程(六):QDockWidget停靠視窗
QDockWidget 上節我們引出了QDockWidget的概念,這節進行講解並加以引用。 常用函式: 1、addDockWidget:新增停靠控制元件,用於指定或更改停靠控制元件的位置以及方向。 void QMainWindow::ad
【QT】QT從零入門教程(十一):QT自定義視窗
首先是借鑑了網上的部落格,實現無邊框,自由拖動的自定義視窗效果。 #ifndef CUSTOMWINDOW_H #define CUSTOMWINDOW_H #include <QtGui> #include <QtWidg
【Qt】Qt之自定義介面(實現無邊框、可移動)【轉】
簡述 UI設計是指對軟體的人機互動、操作邏輯、介面美觀的整體設計。好的UI設計不僅是讓軟體變得有個性、有品位,還要讓軟體的操作變得舒適簡單、自由,充分體現軟體的定位和特點。 愛美之心人皆有之。其實軟體介面就像工業造型一樣,是產品的重要賣點。一個產品擁有美觀的介面會給人帶來舒適的視覺享受,拉近人與產品的
【Qt】Qt之自定義介面(窗體縮放-跨平臺終極版)【轉】
簡述 通過上一節內容,我們實現了窗體的縮放,功能很不錯,但是很遺憾-不支援跨平臺!如果對於多平臺來說,這是一個硬傷,所以,我們急需要一個能夠支援跨平臺的實現方案。 在網上看到過很多不同的實現方式,多多少少會存在一些問題-要麼融合度太高、要麼不能很好地進行移動、縮放。基於前人的分享與總結,最後,我花了很
【Qt】Qt之自定義介面(右下角冒泡)【轉】
簡述 網頁右下角上經常會出現一些提示性的資訊,桌面軟體中也比較常見,類似360新聞、QQ訊息提示一樣! 這種功能用動畫實現起來很簡單,這節我們暫時使用定時器來實現,後面章節會對動畫框架進行詳細講解。 下面我們來實現一個右下角冒泡的功能。 簡述 效果 實現原理 實現 效果
【Qt】Qt之程序間通訊(Windows訊息)【轉】
簡述 通過上一節的瞭解,我們可以看出程序通訊的方式很多,今天分享下如何利用Windows訊息機制來進行不同程序間的通訊。 效果 傳送訊息 自定義型別與接收窗體 包含所需庫,定義傳送的自定義型別、接收訊息的窗體標題。自定義型別可以處理訊息過多情況下,對訊息的區分,如果不需要也可以去掉。
【Qt】Qt之重啟應用程式【轉】
簡介 今天分享的內容有些意思-如何重啟一個應用程式。其實,有時候這是一個很重要的功能點,而且很人性化、易用性很好。 例如:切換使用者。當某個使用者登入成功之後,需要切換到其它賬號,那麼這時,你就知道它的重要性了。 效果 qApp退出程式碼重啟 定義退出程式碼 比較好的方式,在主視窗中定
【Qt】Qt之啟動外部程式【轉】
簡述 QProcess可以用來啟動外部程式,並與它們互動。 要啟動一個程序,通過呼叫start()來進行,引數包含程式的名稱和命令列引數,引數作為一個QStringList的單個字串。 另外,也可以使用setProgram()和setArguments()來執行,然後呼叫start()或open()
【Qt】Qt之密碼框不可選中、複製、貼上、無右鍵選單等【轉】
簡述 在做使用者登入、修改密碼的時候,往往會用到密碼框,其中一些功能要求與普通的輸入框不同,例如:不能選中、複製、貼上、無右鍵選單等功能,當然設定密碼不可見是必須的! 下面介紹兩種方式來實現相同的效果。 簡述 效果 基礎部分 事件過濾器 介面說明 實現方式 事件重
【Qt】Qt之Tab鍵切換焦點順序【轉】
簡介 Qt的視窗部件按使用者的習慣來處理鍵盤焦點。也就是說,其出發點是使用者的焦點能定向到任何一個視窗,或者視窗中任何一個部件。 焦點獲取方式比較多,例如:滑鼠點選、Tab鍵切換、快捷鍵、滑鼠滾輪等。 習慣性的,我們經常會使用Tab鍵來控制焦點順序,比如:使用者註冊時,個人資訊輸入框焦點的切換、執行
【Qt】Qt之自定義介面(QMessageBox)【轉】
簡述 通過前幾節的自定義窗體的學習,我們可以很容易的寫出一套屬於自己風格的介面框架,通用於各種窗體,比如:QWidget、QDialog、QMainWindow。 大多數窗體的實現都是採用控制元件堆積來完成的,只要思路清晰,再複雜的介面實現起來都遊刃有餘。下面我來列舉一個由QMessageBox擴充套
【Qt】Qt之程序間通訊(共享記憶體)【轉】
簡述 上一節中,我們分享下如何利用Windows訊息機制來進行不同程序間的通訊。但是有很多侷限性,比如:不能跨平臺,而且必須兩個程序同時存在才可以,要麼程序A發了訊息誰接收呢? 下面我們來分享另外一種跨平臺的進行間通訊的方式-Shared Memory(共享記憶體)。 簡述 注意事項
【Qt】Qt之自定義搜尋框【轉】
簡述 關於搜尋框,大家都經常接觸。例如:瀏覽器搜尋、Windows資源管理器搜尋等。 當然,這些對於Qt實現來說毫無壓力,只要思路清晰,分分鐘搞定。 簡述 效果 細節分析 原始碼下載 效果 細節分析 實現細節需要如下步驟: 組合實現,輸入框+
【Qt】Qt之自定義介面(窗體縮放)【轉】
簡述 通過前兩節內容,我們實現了自定義窗體的移動,以及自定義標題欄-用來顯示窗體的圖示、標題,以及控制窗體最小化、最大化、關閉。 在這之後,我們還缺少窗體的縮放-當滑鼠移動到窗體的邊框-左、上、右、下、左上角、左下角、右上角、右下角時候,滑鼠變為相應的樣式,並且窗體可以隨著滑鼠拖動而進行放大、縮小。
【Qt】QDialog之遮蔽Esc鍵【轉】
簡述 Qt中Esc鍵會在一些控制元件中預設的進行一些事件的觸發,比如:QDialog,按下Esc鍵視窗消失。大多數情況下,我們不需要這麼做,那麼就需要對預設事件進行遮蔽。 簡述 原始碼分析 事件過濾器 事件重寫 原始碼分析 通過檢視QDialog的原始碼,我們很容易會發現
【Qt】Qt之設定QWidget背景色【轉】
簡述 QWidget是所有使用者介面物件的基類,這意味著可以用同樣的方法為其它子類控制元件改變背景顏色。 Qt中視窗背景的設定,下面介紹三種方法。 使用QPalette 使用Style Sheet 繪圖事件 一般我不用QSS設定視窗背景,也不建議使用。(這裡是對於視窗而,如果是子部件當
【Qt】Qt之程序間通訊(QProcess)【轉】
簡述 前幾節裡,分享了程序通訊的幾種方式:Windows訊息機制、Shared Memory(共享記憶體),本節講解下關於程序通訊的另外一種方式-QProcess。 簡述 命令列讀取 說明 實現 更多參考 命令列引數啟動 說明 程序A-帶參啟動
【Qt】Qt之程序間通訊(IPC)【轉】
簡述 程序間通訊,就是在不同程序之間傳播或交換資訊。那麼不同程序之間存在著什麼雙方都可以訪問的介質呢?程序的使用者空間是互相獨立的,一般而言是不能互相訪問的,唯一的例外是共享記憶體區。但是,系統空間卻是“公共場所”,所以核心顯然可以提供這樣的條件。除此以外,那就是雙方都可以訪問的外設了。在這個意義上,兩