<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 11.5 分裂器布局 QSplitter 實質上是一個窗口部件,但同時它可以包含一些其他窗口部件。在切分窗口(splitter)中的這些窗口部件會通過切分條(splitter handle)而分隔開來。用戶可以 通過拖動這些切分條來改變切分窗口中子窗口部件的尺寸。切分窗口常常可以用作布局管理 器的替代,從而可以把更多的控制權交給用戶。 ### 11.5.1使用方法 大家知道,QSplitter 是一個容器類,Qt Designer 把分裂器對象視為可以容納其它窗 口部件的布局。在 Qt Designer 中要使用分裂器布局也很容易,如圖 11-27 所示,先選中 要布局的界面元素,然后選擇工具欄上對應的按鈕或者通過菜單項或者鼠標右鍵的上下文菜 單就可以完成。 ![](https://box.kancloud.cn/2016-01-22_56a1a15975755.png) 圖 11-27 使用分裂器布局 QSplitter 類可以用來創建分裂器布局,繼而實現切分窗口。 創建一個分裂器布局的一般步驟如下: 第 1 步,創建要使用的窗口部件。 第 2 步,創建分裂器布局的實例,就是 QSplitter 的實例。 第 3 步,使用 insertWidget()或者 addWidget()方法把第 1 步創建的窗口部件加入到 布局之中。 第 4 步,調用 QWidget::setLayou()方法把布局安裝到窗體上。 注意,在使用分裂器布局之前,需要包含它的頭文件聲明: ``` #include &lt;QSplitter&gt; ``` ### 11.5.2 構造函數 QSplitter 類有兩個構造函數的原型: ``` QSplitter::QSplitter ( Qt::Orientation orientation, QWidget * parent = 0 ) ``` 參數 orientation 指定了分裂器的方向是水平的還是垂直的, parent 指定了父窗口。一 個使用該型構造函數的代碼示例如下: ``` QSplitter *splitterRight = new QSplitter(Qt::Vertical,splitterMain); ``` 該代碼定義了一個垂直分裂器布局,并指定了它的父窗口為 splitterMain,后者也是一個分裂器布局。 ``` QSplitter::QSplitter ( QWidget * parent = 0 ) ``` 這個型別實質上是第一種構造函數的缺省變體,它默認創建一個水平的分裂器布局。 一個使用該型構造函數的代碼示例如下: ``` QSplitter splitter(0); ``` 該代碼定義了一個水平分裂器布局,并且采用程序上下文中的窗口作為父窗口。 這兩種構造函數型我們都會經常用到,請讀者朋友注意掌握。 ### 11.5.3 一些深入的話題 默認情況下,在分裂器布局中的窗口部件會盡可能的按照用戶的意愿在它的最小大小 提示以及最小大小或者是最大大小之間調整。如果有需要,也可以調用 QSplitter 類的 setSizes()方法來為布局中每個窗口部件指定大小。而要獲取分裂器布局內當前的各個窗口 部件的大小,可以使用 QSplitter 類的 sizes()方法。 如果你想保存分裂器布局的構造,可以使用 QSplitter 的 saveState()和 restoreState()方法。它們通常與 QSettings 類結合使用,保存設置的代碼如下: ``` QSettings settings; settings.setValue("splitterSizes", splitter-&gt;saveState()); ``` 恢復設置的代碼如下: ``` QSettings settings; splitter-&gt;restoreState(settings.value("splitterSizes").toByteArray()); ``` 同前面講過的堆棧布局的情形類似,如果你想獲取分裂器布局中的窗口部件的相關信息,可以通過調用 indexof()、widget()以及 count()等方法來實現。 當你調用 hide()方法隱藏了分裂器布局中的某個窗口部件時,它會在界面上消失掉, 并且它原先占有的空間將被其它的窗口部件所 “分享”。而一旦你調用 show()方法顯示它 時,一切又會恢復原樣。 分裂器布局也是經常使用的一種,它分為分裂器水平布局和分裂器垂直布局,這可以 通過設置分裂器布局的方向來確定,如 Qt::Horizontal 和 Qt::Vertical。使用它們時,界 面效果和使用常見的水平和垂直布局幾乎沒有區別,它的最明顯特征是布局內的元素之間是 等間距的,而水平和垂直布局則不一定是這樣。 ### 11.5.4 分裂器布局實例 在 QSplitter 中的子窗口部件將會自動按照創建時的順序一個挨一個的(或者一個在 另外一個的下面)放在一起,并以切分窗口拖動條( splitter bar)來分隔相鄰的窗口部 件。以下是用于創建如圖 11-28 所示的分裂器水平布局的窗口的代碼。完整的源代碼見實 例 splitter。 ``` #include &lt;QtGui&gt; int main(int argc, char *argv[]) { QApplication app(argc, argv); QListWidget *listWidget = new QListWidget; QTreeWidget *treeWidget = new QTreeWidget; QTextEdit *editor = new QTextEdit; QSplitter splitter(Qt::Horizontal); splitter.addWidget(listWidget); splitter.addWidget(treeWidget); splitter.addWidget(editor); listWidget-&gt;addItem(QObject::tr("Inbox")); listWidget-&gt;addItem(QObject::tr("Outbox")); listWidget-&gt;addItem(QObject::tr("Sent")); listWidget-&gt;addItem(QObject::tr("Trash")); treeWidget-&gt;setColumnCount(1); QList&lt;QTreeWidgetItem *&gt; items; for (int i = 0; i &lt; 10; ++i) items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(QString("item:%1").arg(i)))); treeWidget-&gt;insertTopLevelItems(0, items); editor-&gt;setPlainText(QObject::tr("My child, my sister,\n" "think of the sweetness\n" "of going there to live together!\n" "To love at leisure,\n" "to love and to die\n" "in a country that is the image of you!")); splitter.setWindowTitle(QObject::tr("Splitter")); splitter.show(); return app.exec(); } ``` 把這段代碼保存成一個.cpp 文件,如 splitter.cpp,并創建一個文件夾 splitter,把splitter.cpp 文件放入其中。依次運行 qmake –project,qmake splitter.pro,mingw32- make,即可生成可執行文件。程序的運行效果如圖 11-28 所示。 ![](https://box.kancloud.cn/2016-01-22_56a1a159a06b0.png) 圖 11-28 分裂器布局實例效果 該程序代碼比較易懂,我們簡要的講解一下。 第 1 行,加入了程序中用到的頭文件聲明,這也包括了 QSplitter 類的聲明在里面。 第 5-7 行定義了布局內用到的窗口部件。 第 8 行定義了一個分裂器水平布局。 第 9-11 行將窗口部件加入到分裂器布局之中。 第 12-15 行為 listWidget 添加一些項目。注意在這個程序中,由于 main()主函數并不 是屬于某個 QObject 類的子類,所以不能直接使用 tr()函數,而需要靜態調用它,即 QObject::tr()。 第 16 行設置 treeWidget 的列數為 1。 第 17 行聲明一個鏈表對象 items。 第 18-19 行為 items 賦值。 第 20 行將 items 的值加入到 treeWidget 中。 第 21 行為 editor 設置文本。 第 22 行設置窗口標題。 第 23-24 行顯示窗體。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看