zhengtianzuo |
2017-09-30 16:56 |
zhengtianzuo系列-Qt自定义窗体系统按钮
首先可以使用setWindowFlags(Qt::FramelessWindowHint); 来隐藏窗体的标题栏, 当然也包括了默认的系统按钮.
然后在可以通过代码或者Qt的Designer在窗体右上角摆放好最小化, 最大化(还原), 和关闭三个按钮并关联好信号槽. 分别设置三个按钮的QSS
``` QToolButton#toolButtonMin{ border-image: url(:/images/min(1).png); } QToolButton#toolButtonMin:hover{ border-image: url(:/images/min(3).png); } QToolButton#toolButtonMin:pressed{ border-image: url(:/images/min.png); } ```
最大化和还原按钮其实一个, 需要根据窗体的最大化/恢复状态来进行切换 qss中根据最大化属性来进行不同图片的加载
``` QToolButton#toolButtonMax[maximizeProperty="maximize"]{ border-image: url(:/images/max(1).png); } QToolButton#toolButtonMax[maximizeProperty="maximize"]:hover{ border-image: url(:/images/max(3).png); } QToolButton#toolButtonMax[maximizeProperty="maximize"]:pressed{ border-image: url(:/images/max.png); } QToolButton#toolButtonMax[maximizeProperty="restore"]{ border-image: url(:/images/restore(1).png); } QToolButton#toolButtonMax[maximizeProperty="restore"]:hover{ border-image: url(:/images/restore(3).png); } QToolButton#toolButtonMax[maximizeProperty="restore"]:pressed{ border-image: url(:/images/restore.png); } ```
cpp中同样需要设置, 其中unpolish()和polish()是为了让样式重新绘制
``` bool bMaximize = this->isMaximized(); ui->toolButtonMax->setProperty("maximizeProperty", bMaximize ? "restore" : "maximize"); ui->toolButtonMax->style()->unpolish(ui->toolButtonMax); ui->toolButtonMax->style()->polish(ui->toolButtonMax); ui->toolButtonMax->update(); ```
需要完整代码请访问 QtWidgetsExamples |
|