QT如何实现圆形按钮?

susuifeng 2010-06-28 09:43:18
请看这张图片: http://hi.csdn.net/attachment/201006/28/2702037_1277732191x7A4.png
是方形的一张图,但里面的蓝色区域是圆形的........

我想把我的程序中的按钮的icon设成这张图片,以实现windows自带的播放器Media player里的播放按钮那样的效果.......请教各位大侠怎样实现?
...全文
3998 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
三条猫 2011-12-07
  • 打赏
  • 举报
回复
2楼的方法不错,mark
长弓成 2011-10-19
  • 打赏
  • 举报
回复
在做media player中
whuzjn 2011-09-27
  • 打赏
  • 举报
回复
观摩下
mhnler 2011-04-18
  • 打赏
  • 举报
回复
想看二樓
kinfirge 2011-03-14
  • 打赏
  • 举报
回复
为了看2楼的 相同
lvliqi 2011-02-21
  • 打赏
  • 举报
回复
为了看2楼的
susuifeng 2010-06-30
  • 打赏
  • 举报
回复
算了结贴吧,没用到自定义按钮,主要是发现设置按钮的Icon再设置按钮的边框为 playButton->setFlat(true);之后,界面貌似还能看吧...勉强凑合了....个人开始的目的是模仿Media Player的界面.....这是现在的界面,是不是差远了? http://hi.csdn.net/attachment/201006/29/2702037_1277841515llS5.jpg
susuifeng 2010-06-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dext 的回复:]
C/C++ code

class Button : public QGraphicsWidget
{
Q_OBJECT
public:
Button(const QPixmap &pixmap, QGraphicsItem *parent = 0)
: QGraphicsWidget(parent), _pix(pixmap)
……
[/Quote]

请问如何使用这个类?在其构造函数里有两个参数,一个是图片,另一个是什么?
lefttime 2010-06-29
  • 打赏
  • 举报
回复
说错了, 应该是第一种像1楼说的~`` 呵呵
lefttime 2010-06-29
  • 打赏
  • 举报
回复
一种方式像2楼一样, 另一种方式采用遮罩也行`··

...
QPixmap pixmap;
QPushButton* pushButton = new QPushButton;

pushButton->setIcon(pixmap);
pushButton->setMask(pixMap.createHeuristicMask());
...
vanchristin 2010-06-29
  • 打赏
  • 举报
回复

QPushButton *playButton = new QPushButton;
playButton->setIcon(QIcon(...));
dext 2010-06-29
  • 打赏
  • 举报
回复

class Button : public QGraphicsWidget
{
Q_OBJECT
public:
Button(const QPixmap &pixmap, QGraphicsItem *parent = 0)
: QGraphicsWidget(parent), _pix(pixmap)
{
setAcceptHoverEvents(true);
setCacheMode(DeviceCoordinateCache);
}

QRectF boundingRect() const
{
return QRectF(-65, -65, 130, 130);
}

QPainterPath shape() const
{
QPainterPath path;
path.addEllipse(boundingRect());
return path;
}

void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *)
{
bool down = option->state & QStyle::State_Sunken;
QRectF r = boundingRect();
QLinearGradient grad(r.topLeft(), r.bottomRight());
grad.setColorAt(down ? 1 : 0, option->state & QStyle::State_MouseOver ? Qt::white : Qt::lightGray);
grad.setColorAt(down ? 0 : 1, Qt::darkGray);
painter->setPen(Qt::darkGray);
painter->setBrush(grad);
painter->drawEllipse(r);
QLinearGradient grad2(r.topLeft(), r.bottomRight());
grad.setColorAt(down ? 1 : 0, Qt::darkGray);
grad.setColorAt(down ? 0 : 1, Qt::lightGray);
painter->setPen(Qt::NoPen);
painter->setBrush(grad);
if (down)
painter->translate(2, 2);
painter->drawEllipse(r.adjusted(5, 5, -5, -5));
painter->drawPixmap(-_pix.width()/2, -_pix.height()/2, _pix);
}

signals:
void pressed();

protected:
void mousePressEvent(QGraphicsSceneMouseEvent *)
{
emit pressed();
update();
}

void mouseReleaseEvent(QGraphicsSceneMouseEvent *)
{
update();
}

private:
QPixmap _pix;
};

16,215

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧