Qt:上图标下文字的按钮

方法一:QPushButton用qss自定义设置上图标下文字的样式

    QPushButton#pushButton_close{
    padding-top: 2px;
    padding-bottom: 2px;
    padding-left: 4px;
    padding-right: 4px;
    border: none;
    font: bold 16px;
    color: #0B68D0;
    text-align:bottom;
    border-radius: 6px;
    background-color: #FFFFFF;
    background-image: url(:/images/close.png);
    background-position: top;
    background-origin: content;
    background-repeat: no-repeat;

方法二:使用QToolButton设置Qt::ToolButtonTextUnderIcon

ui->toolButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);

qss样式设置:

QToolButton#toolButton {
qproperty-icon:url(:/images/close.png);
qproperty-iconSize: 40px 40px;
border: 1px solid transparent;
border-radius: 15px;
background-color: transparent;
font-size: 16px;
color:#0B68D0;
border-radius: 6px;
background-color: #FFFFFF;
}

方法三:重写QPushButton类自定义上图标下文字的按钮控件类

void MyPushButton::drawIcon(QPainter *painter)
{
   const QRect btnRect = QRect(10, 10, 80, 80);
   const QSize iconSize = QSize(40, 40);

   QPixmap pix(":/images/close.png");
   painter->save();
   painter->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);


   painter->drawPixmap(QRect((btnRect.width()  - iconSize.width() ) / 2,
                             6,
                             iconSize.width(),
                             iconSize.height()),
                             pix);
   painter->restore();
}

void MyPushButton::drawText(QPainter *painter)
{
    const QRect btnRect = QRect(10, 10, 80, 80);
    const QSize iconSize = QSize(40, 40);

    painter->save();
    painter->setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);

    QFont font = this->font();

    font.setPixelSize(16);

    painter->setFont(font);

    painter->drawText(QRect( 0,
                             (6 + iconSize.height()),
                             btnRect.width(),
                             (btnRect.height() - (6 + iconSize.height()))),
                             Qt::AlignCenter,
                             "关闭");

    painter->restore();
}

void MyPushButton::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QStyleOption opt;
    opt.init(this);
    style()->drawPrimitive(QStyle::PE_Widget,&opt, &painter, this);
    QPushButton::paintEvent(event);
    drawIcon(&painter);
    drawText(&painter);
}

参考效果:
上图标下文字按钮

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值