快捷搜索:  汽车  科技

qt按钮跟随界面放大:用QT实现竖向按钮

qt按钮跟随界面放大:用QT实现竖向按钮该方法倒是可行,但工作量忒大,原本按钮的鼠标响应事项都需要重新实现,而且也不能用qss实现按钮按下弹起的各种效率了。 2)派生QWidget类,重新实现paintEvent()方法。(先吐槽下baidu,编程方面的搜索结果几乎清一色的csdn,哪怕有几项不是来自csdn的,内容也几乎一模一样) 1) 给文字加换行符,即 "自\n定\n义\n属\n性",真是太low了,而且也不是我需要的效果。不过是把文字加上了换行符

第一篇文章,没想好写点什么,最近因工作需要做了一个竖向按钮就把其中小小曲折写写吧。

竖向按钮功能完全等同于QPushButton,只不过一般按钮是横向的,它是竖向的

qt按钮跟随界面放大:用QT实现竖向按钮(1)

最终效果

听起来很easy的事情,于是就想着baidu一下,copy一块代码得了,结是搜索到的内容很不靠谱 总结一下,大概有两种回答:

(先吐槽下baidu,编程方面的搜索结果几乎清一色的csdn,哪怕有几项不是来自csdn的,内容也几乎一模一样)

1) 给文字加换行符,即 "自\n定\n义\n属\n性",真是太low了,而且也不是我需要的效果。

qt按钮跟随界面放大:用QT实现竖向按钮(2)

不过是把文字加上了换行符

2)派生QWidget类,重新实现paintEvent()方法。

该方法倒是可行,但工作量忒大,原本按钮的鼠标响应事项都需要重新实现,而且也不能用qss实现按钮按下弹起的各种效率了。

干脆别偷懒了,自己搞起

  1. 首先来阅读下QPushButton类中paintEvent方法的实现:

void QPushButton::paintEvent(QPaintEvent * e) { QStylePainter sp(this); QStyleOptionButton option; initStyleOption(&option); sp.drawControl(QStyle::CE_PushButton option); }

2.通过观察发现只需要给QStylePainter设置一个90度的旋转变换即可。因此,竖向按钮的实现如下:

class CMyButton :public QPushButton //从QPushButton派生 { }

重写paintEvent方法:

void CMyButton::paintEvent(QPaintEvent * e) { QStylePainter sp(this); QStyleOptionButton option; initStyleOption(&option); auto r = option.rect; option.rect.setWidth(r.height()); //把按钮的长宽值互换 option.rect.setHeight(r.width()); QTransform trans; trans.translate(r.width() 0); trans.rotate(90); sp.setTransform(trans); //设置旋转变换 sp.drawControl(QStyle::CE_PushButton option); }

猜您喜欢: