• 7223阅读
  • 4回复

button背景的问题??? [复制链接]

上一主题 下一主题
离线n1wer
 
只看楼主 倒序阅读 楼主  发表于: 2008-05-08
— 本帖被 XChinux 执行加亮操作(2008-05-08) —
我自己写了一个button类,想用自己的图片来改变button的背景,
以下是我的代码!
#include "mybutton.h"

#include <QStyle>
#include <QStyleOptionButton>
#include <QPainter>
#include <QRegion>

MyButton::MyButton( QWidget *parent ) : QAbstractButton( parent )
{
}

QSize MyButton::sizeHint() const
{
  return QSize( fontMetrics().width( text() )+100, fontMetrics().height()+100 );
}

void MyButton::paintEvent( QPaintEvent* )
{
  QPainter painter( this );

QImage image(";/China.gif");


  QStyleOptionButton option;
  option.init( this );
  if( isDown() )
    option.state |= QStyle::State_Sunken;
  else if( isChecked() )
    option.state |= QStyle::State_On;
   
  style()->drawControl( QStyle::CE_PushButton, &option, &painter, this );
   
  painter.setFont( font() );
 
  if( !isEnabled() )
    painter.setPen( Qt::darkGray );
  else if( isDown() )
    {
            painter.setPen( Qt::red );
                   //painter.drawPixmap(rect(),QPixmap::fromImage(image));
    } 
else
    painter.setPen( Qt::darkRed );

painter.drawText( rect(), Qt::AlignCenter, "my button" );
 
//painter.drawPixmap(rect(),QPixmap::fromImage(image));
}
void MyButton::resizeEvent(QResizeEvent *event)
{
  int side = qMin(width(), height());
    QRegion maskedRegion(width()/2 - side/2+2, height()/2 - side/2+2, side-5, side-5,
                        QRegion::Ellipse);
    setMask(maskedRegion);
 
   
}

用resize画了一个圆,使我的button呈现为圆形的,在这个button上也可以显示文字,但是怎么也改变不了背景,原来在用qt3.3.8时,有一个setpaletteBackgroundPixmap()可以实现这个功能,但是在qt4.1.1时,好象没有什么函数可以实现这个功能!
不知道那位大哥能帮忙一下!我现在用的是qt4.1.1.
离线toadman
只看该作者 1楼 发表于: 2008-05-22
没用过qt4,关注!
离线mumutouv

只看该作者 2楼 发表于: 2008-05-22
你根本就没有重绘背景啊
离线mumutouv

只看该作者 3楼 发表于: 2008-05-22
你可以通过drawRect来啊
离线andreitang
只看该作者 4楼 发表于: 2008-08-22
哥们,没仔细看帮助吧

For example, if you have code like
widget->setBackgroundPixmap(pixmap);

you can rewrite it as

QPalette palette;
palette.setBrush(widget->backgroundRole(), QBrush(pixmap));
widget->setPalette(palette);
快速回复
限100 字节
 
上一个 下一个