查看完整版本: [-- zhengtianzuo系列-Qt自定义窗体系统按钮 --]

QTCN开发网 -> Qt代码秀 -> zhengtianzuo系列-Qt自定义窗体系统按钮 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

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

big_mouse 2020-04-22 09:04


查看完整版本: [-- zhengtianzuo系列-Qt自定义窗体系统按钮 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled