2017-05-05 4 views
0

Mit Qt C++ habe ich einige Schaltflächen mit Symbolen und Text. Da der Text aller Tasten nicht die gleiche Länge hat, sind Symbole nicht ausgerichtet:QPushButton: Ausrichten von Symbol und Text

enter image description here

Ich versuchte stattdessen eine QToolButton zu verwenden:

button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); 
button->setSizePolicy(QSizePolicy(QSizePolicy::Policy::Expanding, button->sizePolicy().verticalPolicy())); 

aber keinen Erfolg, könnte das nicht Zentrieren Text endete mit, dass bis:

enter image description here

gibt es eine Möglichkeit Symbole vertikal und ausgerichtet haben, werden lso Text bleiben zentriert, wie folgt aus:

enter image description here

Antwort

3

Sie es QPushButton von Nebenklassen erreichen können. Hier ist ein Beispiel mit der minimalen Funktionalität:

class MyButton : public QPushButton { 
public: 
    explicit MyButton(QWidget* parent = nullptr) : QPushButton(parent) {} 
    virtual ~MyButton() {} 

    void setPixmap(const QPixmap& pixmap) { m_pixmap = pixmap; } 

    virtual QSize sizeHint() const override { 
    const auto parentHint = QPushButton::sizeHint(); 
    // add margins here if needed 
    return QSize(parentHint.width() + m_pixmap.width(), std::max(parentHint.height(), m_pixmap.height())); 
    } 

protected: 
    virtual void paintEvent(QPaintEvent* e) override { 
    QPushButton::paintEvent(e); 

    if (!m_pixmap.isNull()) { 
     const int y = (height() - m_pixmap.height())/2; // add margin if needed 
     QPainter painter(this); 
     painter.drawPixmap(5, y, m_pixmap); // hardcoded horizontal margin 
    } 
    } 

private: 
    QPixmap m_pixmap; 
}; 

Wenn Sie es von Qt Designer verwenden möchten, verwenden Sie einfach die promote feature.

+0

Sehr nett. Vielen Dank. Hoffte, eine einfachere Lösung zu bekommen, aber es funktioniert! – jpo38

+0

Gut zu helfen. Lassen Sie uns wissen, wenn Sie einen einfacheren Weg finden, wäre es auch sehr nützlich. – cbuchart