使用 Qt C++,我有一些带有图标和文本的按钮。由于所有按钮的文本长度不同,图标未对齐:
我尝试使用 QToolButton 代替:
button->setToolButtonStyle( Qt::ToolButtonTextBesideIcon );
button->setSizePolicy( QSizePolicy( QSizePolicy::Policy::Expanding, button->sizePolicy().verticalPolicy() ) );
但没有成功,无法使文本居中,最终结果是:
有没有办法让图标垂直对齐并且文本保持居中,如下所示:
您可以通过子类化来实现它QPushButton
。这是一个具有最低功能的示例:
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;
};
如果您想从 Qt Designer 使用它,只需使用推广特色 http://doc.qt.io/qt-4.8/designer-using-custom-widgets.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)