天天看點

Qt使用QSplitter實作分割視窗

分割視窗在應用程式中經常用到,它可以靈活分布視窗布局,經常用于類似檔案資料總管的視窗設計中,然後抱着這樣的想法簡單的實作了下

Qt使用QSplitter實作分割視窗
Qt使用QSplitter實作分割視窗

[cpp] view plain copy print ?

  1. //main.cpp  
  2. #include <QApplication>  
  3. #include <QSplitter>  
  4. #include <QTextEdit>  
  5. #include <QTextCodec>  
  6. int main(int argc, char *argv[])  
  7. {  
  8.     QTextCodec::setCodecForTr(QTextCodec::codecForLocale());  
  9.     QApplication app(argc, argv);  
  10.     //建立主分割視窗 設定方向為水準分割視窗  
  11.     QSplitter *mainSplitter = new QSplitter(Qt::Horizontal, 0);  
  12.     //建立一個QTextEdit控件 設定其父控件為mainSplitter  
  13.     QTextEdit *leftEdit = new QTextEdit(QObject::tr("左視窗"), mainSplitter);  
  14.     //設定QTextEdit控件中的文字的對齊方式居中顯示  
  15.     leftEdit->setAlignment(Qt::AlignCenter);  
  16.     //建立右分割視窗 設定其父控件為mainSplitter 設定方向為垂直分割視窗 最後其分割成上下兩個視窗  
  17.     QSplitter *rightSplitter = new QSplitter(Qt::Vertical, mainSplitter);  
  18.     //設定分割視窗的分割條在拖動時是否為實時更新 true為實時更新 false則在拖動時隻顯示一條灰色的線條  
  19.     //在拖動到位并彈起滑鼠後再顯示分隔條  
  20.     rightSplitter->setOpaqueResize(false);  
  21.     //開始将其分割成上下兩個視窗  
  22.     QTextEdit *upEdit = new QTextEdit(QObject::tr("上視窗"), rightSplitter);  
  23.     upEdit->setAlignment(Qt::AlignCenter);  
  24.     QTextEdit *bottomEdit = new QTextEdit(QObject::tr("下視窗"), rightSplitter);  
  25.     bottomEdit->setAlignment(Qt::AlignCenter);  
  26.     //設定可伸縮控件 第一個參數指定控件設定的控件序号,該控件序号按插入的先後次序依次從0開始編号  
  27.     //第二個參數大于0表示此控件為伸縮控件 此例中設定右部分割視窗為可伸縮控件  
  28.     mainSplitter->setStretchFactor(1, 1);  
  29.     mainSplitter->setWindowTitle(QObject::tr("分割視窗"));  
  30.     mainSplitter->show();  
  31.     return app.exec();  

在使用QSplitter的時候,對setStretchFactor沒怎麼了解,找了點資料看來下,順便記下來

//主分割視窗

QSplitter *splitterMain=new QSplitter(Qt::Horizontal,0);

QTextEdit *textLeft=new QtextEdit(QObject::tr("Left Widget"),splitterMain);

textLeft->setAlignment(Qt::AlignCenter);

QSplitter *splitterRight=new QSplitter(Qt::Vertical,splitterMain);

splitterRight->setOpaqueResize(false);

QTextEdit *textUp=new QtextEdit(QObject::tr("Top Widget"),splitterRight);

textUp->setAlignment(Qt::AlignCenter);

QTextEdit *textBottom=new QtextEdit(QObject::tr("Bottom Widget"),splitterRight);

textBottom->setAlignment(Qt:AlignCenter);

splitterMain->setStretchFactor(1,1);

splitterMain->setWindowTitle(QObject::tr("Splitter"));

SetStretchFactor()方法用于設定可伸縮控件,它的第一個參數指定設定的控件序号,控件序号按插入的先後次序進行編号;第二個參數為大于0的值表示此控件為可伸縮控件。此執行個體中設定右部分割窗為可伸縮控件,當整個對話框的寬度發生改變時,左部的檔案編輯框寬度保持不變。右部的分割窗寬度随整個對話框大小的改變進行調整。