2013-01-18 79 views
5

是否有可能有一個QSplitter有一個固定大小的部件和另一個具有可變大小?QSplitter具有一個固定大小的小部件和一個可變大小的小部件?

此代碼設置正確的事情,但是當調整窗口大小拆分成比例地改變初始大小的小部件:

vSplitter = new QSplitter(Qt::Vertical, this); 
vSplitter->addWidget(widget1); 
vSplitter->addWidget(widget2); 
QList<int> heights; 
heights.push_back(550); 
heights.push_back(1000); 
vSplitter->setSizes(heights); 

setCentralWidget(vSplitter); 

謝謝。

回答

0

我正在嘗試做類似的事情。我有一個固定小部件(頂部)和一個非固定小部件(底部)。我希望用戶能夠正常使用分離器句柄,但我不希望窗口大小調整爲固定小部件添加空間。在兩個小部件上使用setSizePolicy對我來說都不起作用,並且在一個或兩個小部件上都沒有使用setStretchFactor。

我最終創建了QSplitter的子類,以便我可以實現resizeEvent,它可以在拆分器調整大小後移動拆分器。此代碼假定: 只有兩個小部件。 頂部[0]是可調整大小的,底部[1]不應該是。

下面是我寫的resizeEvent:

MySplitter::resizeEvent(QResizeEvent *event) { 
    /* The first resizeEvent is -1 for height and width, because it was 
     invisible before. */ 
    if (event->oldSize().height() != -1) { 
     int diff; 
     QList<int> previousSizes = sizes(); 
     QSplitter::resizeEvent(event); 
     QList<int> newSizes = sizes(); 
     /* The bottom widget is the fixed one, so find out if that is to 
      grow or shrink. */ 
     diff = newSizes[1] - previousSizes[1]; 
     if (diff > 0) { 
      /* Keep the bottom from growing by giving the size to the top. */ 
      newSizes[0] += diff; 
      newSizes[1] -= diff; 
     } 
     else { 
      /* Steal size from the top to keep it from shrinking. */ 
      newSizes[0] -= diff; 
      newSizes[1] += diff; 
     } 
     setSizes(newSizes); 
    } 
    else 
     QSplitter::resizeEvent(event); 
} 
相關問題