• 3272阅读
  • 1回复

zhengtianzuo系列-Qt自定义窗体系统按钮 [复制链接]

上一主题 下一主题
离线zhengtianzuo
 

只看楼主 倒序阅读 楼主  发表于: 2017-09-30
    首先可以使用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
博客地址: https://blog.csdn.net/zhengtianzuo06
Github: https://github.com/zhengtianzuo
个人产品: https://github.com/zhengtianzuo/Silk
产品网站: http://www.camelstudio.cn
离线big_mouse

只看该作者 1楼 发表于: 2020-04-22
快速回复
限100 字节
 
上一个 下一个