2012-12-05 16 views
17

QHBoxLayout numaralı telefonu kullanan bir QWidget örneğine sahip olmak istiyorum ve (ideal olarak otomatik olarak ancak bazı işlevler gayet iyi görünüyorsa) içeriğine sığacak şekilde yatay olarak yeniden boyutlandırılır. Konteynerin kendisi de dahil olmak üzere tüm aletler aynı yüksekliğe sahip olacağından, yatay yeniden boyutlandırma yeterlidir.Tüm içeriği sığdırmak için en az boyutu olan Qt parçacığı

Kullanım örneği şu şekildedir: Widget, buna konteyner diyelim, yüzüyor, yani herhangi bir düzenin parçası değil. Bir kullanıcı, konteynerin yeni içeriğine uyacak şekilde büyüdüğü, konteynerin düzenine sabit bir boyutta (bir işlev çağırarak) ek araçlar ekleyebilmelidir. Kullanıcı ayrıca, konteynerin tekrar büzüleceği önceden eklenmiş bir widget'ı da kaldırabilmelidir. İlk pencere öğesi ekleninceye ve son silinirse silinene kadar kapsayıcı oluşturulmayacaktır, yani her zaman en az bir widget içerecektir.

Bir örnek:, konteyner | onun sol/sağ sınırlarını olmak üzere şöyle birinci widget'ı ekledikten sonra: bir tane ekledikten sonra

|<1st widget>| 

, bu şuna benzer:

|<1st widget> <2nd, longer widget>| 
ilk widget'ı çıkardıktan sonra

, bu şuna benzer:

|<2nd, longer widget>| 

Bu tür bir basit olması gerektiğinden şüpheleniyorum, ama ben sizeHint, sizePolicy, adjustSize() ve onun düzeninin sizeContraint arasında bir yerde kaybettim ve büyük ölçüde genişleme ve zorlama güncelleştirmeleri ayarlama ve temelde hiçbir yerde olmayan birkaç girişimi (yani, konteyner hiç yeniden boyutlandırılmıyor, konteyner sadece büyüyor, küçülüyor, vb.). Belli ki belli bir şeyi kaçırmam gerektiğinden şüpheleniyorum.

cevap

8

Tahmininiz doğru. Bir düzendeki widget'lar için boyut politikaları ayarlanmalıdır. İlk widget QSizePolicy::Minimum olmalı ve ikincisi istenen bir etkiyi elde etmek için QSizePolicy::Expanding olmalıdır. İşte örnek bir uygulama:

#include <QtGui> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    QPushButton *button1 = new QPushButton("Hello"); 
    button1->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); 
    QObject::connect(button1, SIGNAL(clicked(bool)), button1, SLOT(hide())); 
    QPushButton *button2 = new QPushButton("World"); 
    button2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); 
    QObject::connect(button2, SIGNAL(clicked(bool)), button2, SLOT(hide())); 

    QHBoxLayout *layout = new QHBoxLayout(); 
    layout->addWidget(button1); 
    layout->addWidget(button2); 

    QWidget main; 
    main.setLayout(layout); 
    main.show(); 

    return a.exec(); 
}