11
votes

Taille minimale / largeur d'un qpushbutton créé à partir de code

J'ai créé 2 lignes de boutons-poussoirs, chaque ligne est à l'intérieur d'un QHboxLayout. Entrez l'image Description ici

i Créez les boutons du code: P>

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


3 commentaires

Ça a marché! Merci. Si vous postez cela comme réponse, je peux le sélectionner comme réponse acceptée. Mais pourquoi le redimensionnement a-t-il du travail pour qtoolbutton mais pas pour qpushbutton?


Qtoolbutton et qpushbutton ont des "styles" par défaut différents. Par exemple, un Qpushbutton a une largeur minimale d'environ 6EM. Signification, la largeur de 6 caractères (dans la police que vous utilisez). Qtoolbutton, car il est généralement utilisé pour les images, ou "...", des choses comme ça, a une largeur minimale beaucoup plus petite - comme 2em. Qpushbutton a également généralement plus de marges gauche / droite. Si vous commencez à jouer avec des feuilles de style, c'est quelque chose que vous pouvez bricoler.


Vous pouvez également utiliser SetMinimalSize (QSize &) pour définir les étendues minimales.


3 Réponses :


10
votes

Ceci se produit parce que le minimumSizeImt du qpushbutton n'autorise pas le qlayout de le redimensionner:

La mise en œuvre par défaut du minimumSizedizehint () renvoie un invalide taille s'il n'y a pas de mise en page pour ce widget et retourne la mise en page taille minimale autrement. Réemplissement de widgets les plus intégrés minimumSizeDizeHint ().

qlayout ne redimensions jamais un widget à une taille inférieure au minimum indice de taille sauf si un minimum () est défini ou la stratégie de taille est définie sur Qsizepolicy :: ignorer. Si minimumistize () est défini, l'indice taille minimum sera ignoré.

La solution simple consiste à définir la largeur minimale explicitement: xxx


0 commentaires

5
votes

Comme pnézis écrit, vous voulez probablement remplacer la taille minimale par défaut calculée par le bouton. Voici une façon de le faire en évitant de choisir une taille arbitraire qui pourrait ne pas fonctionner lorsque des conditions varient (différentes polices ou taille de police, style UI, etc.): xxx

ce qui précède a été adapté et Simplifié du propre code de Qpushbutton. Vous voudrez peut-être examiner la source de qpushbutton :: Taillehint pour tous les détails.


0 commentaires

1
votes

SetMaximumWidth travaille pour moi. Le code de l'échantillon est dans Pyqt, mais il doit se traduire directement en C ++ sans aucun problème.

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_())


0 commentaires