qt按钮跟随界面放大:用QT实现竖向按钮
qt按钮跟随界面放大:用QT实现竖向按钮该方法倒是可行,但工作量忒大,原本按钮的鼠标响应事项都需要重新实现,而且也不能用qss实现按钮按下弹起的各种效率了。 2)派生QWidget类,重新实现paintEvent()方法。(先吐槽下baidu,编程方面的搜索结果几乎清一色的csdn,哪怕有几项不是来自csdn的,内容也几乎一模一样) 1) 给文字加换行符,即 "自\n定\n义\n属\n性",真是太low了,而且也不是我需要的效果。不过是把文字加上了换行符
第一篇文章,没想好写点什么,最近因工作需要做了一个竖向按钮就把其中小小曲折写写吧。
竖向按钮功能完全等同于QPushButton,只不过一般按钮是横向的,它是竖向的
最终效果
听起来很easy的事情,于是就想着baidu一下,copy一块代码得了,结是搜索到的内容很不靠谱 总结一下,大概有两种回答:
(先吐槽下baidu,编程方面的搜索结果几乎清一色的csdn,哪怕有几项不是来自csdn的,内容也几乎一模一样)
1) 给文字加换行符,即 "自\n定\n义\n属\n性",真是太low了,而且也不是我需要的效果。
不过是把文字加上了换行符
2)派生QWidget类,重新实现paintEvent()方法。
该方法倒是可行,但工作量忒大,原本按钮的鼠标响应事项都需要重新实现,而且也不能用qss实现按钮按下弹起的各种效率了。
干脆别偷懒了,自己搞起
- 首先来阅读下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);
}