2013-01-18 21 views
5

QSplitter, sabit boyutlu bir tane ve diğeri ise değişken boyutta bir widget'a sahip olabilir mi? Bir sabit boyutlu widget ve bir değişken boyutlu widget ile QSplitter?

Bu kod

doğru şeyler setleri, ancak pencere başlangıç ​​widget'ları boyutları orantılı bölücü değişiklikleri yeniden boyutlandırıldığında:

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); 

teşekkür ederiz.

cevap

12

bu bir deneyin:

QSplitter::setStretchFactor (int index, int stretch)

Sadece 0'a sabit boyutta kalır ve diğer widget'ındaki 1 olarak ayarlamak istediğiniz parçanın streç faktörünü ayarlayın.

Tüm pencereyi yeniden boyutlandırdığınızda, 0 gerginlik faktörüne sahip pencere öğesi yeniden boyutlandırılmaz.

0

Benzer bir şey yapmaya çalışıyorum. Bir sabit widget'ım (üstte) ve sabit olmayan bir widget'ım (alt) var. Kullanıcının splitter tutamacını normal olarak kullanabilmesini istiyorum, ancak sabit widget'a alan eklemek için pencerenin yeniden boyutlandırılmasını istemiyorum. Her iki widget'ta setSizePolicy kullanımı benim için işe yaramadı ve setStretchFactor'ı bir ya da her iki araçta da kullanmadı.

Splitter yeniden boyutlandırıldıktan sonra ayırıcıyı hareket ettirecek bir resizeEvent uygulayabilmem için alt sınıf QSplitter'i sonlandırdım. Bu kod varsayılmaktadır: Sadece iki tane araç var. Üst [0] yeniden boyutlandırılabilir ve alt [1] olmamalıdır.

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); 
} 
: Burada

yazdım resizeEvent olduğunu
İlgili konular