2011-07-10 19 views
9

oluşturulur bir QPushButton genişliği, her satır QHBoxLayout içinde. enter image description hereMinimum boyut/I düğme 2 satır oluşturulan kod

kod düğmeleri oluşturun:

static const char* buttonText = "23456789TJQKA"; 
for (int ii = 0; buttonText[ii]; ii++) 
{ 
    QPushButton* pushButton = new QPushButton(this); 
    pushButton->setText(QString(buttonText[ii])); 
    ui->horizontalLayout_1->addWidget(pushButton); 
} 
for (int ii = 0; buttonText[ii]; ii++) 
{ 
    QPushButton* pushButton = new QPushButton(this); 
    pushButton->setText(QString(buttonText[ii])); 
    ui->horizontalLayout_2->addWidget(pushButton); 
} 

sorun o boyutta ötesinde (kullanıcı iletişim boyutlandırdığında) onların metni içinde uyabilecek rağmen küçültmek edemezler çok daha küçük genişlik. Düğmeleri kod yerine kaynak editöründe el ile oluşturursam, bundan daha küçük bir genişliğe sahip olabilirler.

+4

deneyin. –

+0

Bu işe yaradı! Teşekkürler. Bunu cevap olarak gönderirseniz, kabul edilen cevap olarak seçebilirim. Ancak neden QToolButton için yeniden boyutlandırma işlemi yapıldı, ancak QPushButton için değil? – sashoalm

+0

QToolButton ve QPushButton farklı varsayılan "stiller" var. Örneğin, bir QPushButton en az yaklaşık 6em genişliğe sahiptir. Anlamı, 6 karakterin genişliği (kullandığınız yazı tipinde). QToolButton, genellikle görüntüler için kullanılır, ya da "..." gibi şeyler, daha küçük bir minimum genişliğe sahiptir - 2em gibi. QPushButton da genellikle daha fazla sol/sağ kenar boşluğuna sahiptir. Stil sayfalarıyla oynamaya başlarsanız, bu, tinker yapabileceğiniz bir şeydir. – Liz

cevap

6

QPushButton ait minimumSizeHintQLayout yeniden boyutlandırmak için izin vermediğinden bu gerçekleşir:

minimumSizeHint() varsayılan uygulaması bu widget için hiçbir düzen varsa geçersiz boyutunu döndürür ve döner Düzen, aksi takdirde minimum boyutudur. En yerleşik widget'ları minimumSizeHint() reimplement. MinimumSize() ayarlanır veya boyut politikası QSizePolicy olarak ayarlanır :: Ignore sürece

QLayout küçük asgari boyut ipucu daha boyuta Bir widget'ı yeniden boyutlandırmak asla. MinimumSize() ayarlanırsa, minimum boyutu ipucu dikkate alınmayacaktır.

basit bir çözüm açıkça minimum genişlik ayarlamaktır:

static const char* buttonText = "23456789TJQKA"; 
for (int ii = 0; buttonText[ii]; ii++) 
{ 
    QPushButton* pushButton = new QPushButton(this); 
    pushButton->setMinimumWidth(5); 
    pushButton->setText(QString(buttonText[ii])); 
    ui->horizontalLayout_1->addWidget(pushButton); 
} 
for (int ii = 0; buttonText[ii]; ii++) 
{ 
    QPushButton* pushButton = new QPushButton(this); 
    pushButton->setMinimumWidth(5); 
    pushButton->setText(QString(buttonText[ii])); 
    ui->horizontalLayout_2->addWidget(pushButton); 
} 
4

pnezis yazdığı gibi, muhtemelen düğme ile hesaplanan varsayılan asgari boyutunu geçersiz kılmak istiyorum. İşte şartlar değişir zaman işe yaramayabilir keyfi boyutunu seçmek için kaçınarak bunu bir yolu var (farklı yazı tipi veya yazı tipi boyutunu, UI stili, vs):

QWidget* parent = /* some widget */ 
auto button = new QPushButton(QLatin1String("X"), parent); 
auto textSize = button->fontMetrics().size(Qt::TextShowMnemonic, button->text()); 
QStyleOptionButton opt; 
opt.initFrom(button); 
opt.rect.setSize(textSize); 
button->setMinimumSize(
    button->style()->sizeFromContents(QStyle::CT_PushButton, 
            &opt, 
            textSize, 
            button)); 

yukarıda adapte ve QPushButton kendi itibaren basitleştirilmiş edildi kodu. Tüm ayrıntılar için QPushButton :: sizeHint kaynağının kaynağına bakmak isteyebilirsiniz.

1

setMaximumWidth benim için çalışıyor. örnek kod PyQt'de, ama herhangi bir sorun olmadan C++ doğrudan tercüme edilmelidir. QToolButton ile

from PyQt4 import QtGui 

class Window(QtGui.QWidget): 
    def __init__(self): 
     super(Window, self).__init__() 
     layout = QtGui.QHBoxLayout() 
     texts = [":)", 
       "&Short", 
       "&Longer", 
       "&Different && text", 
       "More && text", 
       "Even longer button text", ] 
     for text in texts: 
      btn = QtGui.QPushButton(text) 
      double = text.count('&&') 
      text = text.replace('&', '') + ('&' * double) 
      width = btn.fontMetrics().boundingRect(text).width() + 7 
      btn.setMaximumWidth(width) 
      layout.addWidget(btn) 
     self.setLayout(layout) 

if __name__ == '__main__': 
    import sys 

    app = QtGui.QApplication(sys.argv) 
    mainWin = Window() 
    mainWin.show() 
    sys.exit(app.exec_())