当前位置:   article > 正文

【Qt】自定义标题栏并实现最小化/最大化/关闭窗口功能_qt 一个标题栏来显示窗体的图标、标题,以及控制窗体最小化、最大化、关闭的按钮,

qt 一个标题栏来显示窗体的图标、标题,以及控制窗体最小化、最大化、关闭的按钮,

之前实现了自定义窗口的拖拽移动,见【Qt】自定义标题栏并实现鼠标拖拽移动 今天实现系统按钮:最小化、最大化、关闭窗口

1.先去掉窗口的边框

  1. /* 标题栏样式 */
  2. this->setWindowFlags(Qt::FramelessWindowHint |
  3. Qt::WindowSystemMenuHint |
  4. Qt::WindowMinMaxButtonsHint);

2.添加三个私有槽,与一个记录窗口当前状态的变量,并设置初值为 true

  1. private slots:
  2. /* custom system btn */
  3. void onMin( bool );
  4. void onMaxOrNormal( bool );
  5. void onClose( bool );
  6. private:
  7. bool maxOrNormal;//true表示当前窗口状态为normal,图标应显示为max

3.添加三个自定义的按钮,图标根据Ui需求确定,我使用系统图标,并连接信号槽

  1. /* custom system btn */
  2. ui->btn_close->setStyleSheet("border:none;");
  3. ui->btn_min->setStyleSheet("border:none;");
  4. ui->btn_max_nor->setStyleSheet("border:none;");//去掉边框
  5. QIcon icon;
  6. icon = style()->standardIcon( QStyle::SP_TitleBarMinButton );
  7. ui->btn_min->setIcon( icon );
  8. if( maxOrNormal ){// true represents Max
  9. icon = style()->standardIcon( QStyle::SP_TitleBarMaxButton );
  10. ui->btn_max_nor->setIcon( icon );
  11. }else{
  12. icon = style()->standardIcon( QStyle::SP_TitleBarNormalButton );
  13. ui->btn_max_nor->setIcon( icon );
  14. }
  15. icon = style()->standardIcon( QStyle::SP_TitleBarCloseButton );
  16. ui->btn_close->setIcon( icon );
  17. connect( ui->btn_min, SIGNAL(clicked(bool)), this, SLOT( onMin(bool)) );
  18. connect( ui->btn_max_nor, SIGNAL(clicked(bool)), this, SLOT( onMaxOrNormal(bool)) );
  19. connect( ui->btn_close, SIGNAL(clicked(bool)), this, SLOT( onClose(bool)) );

4.槽函数源代码:

  1. void MainWindow::onMin(bool)
  2. {
  3. if( windowState() != Qt::WindowMinimized ){
  4. setWindowState( Qt::WindowMinimized );
  5. }
  6. }
  7. void MainWindow::onMaxOrNormal(bool)
  8. {
  9. QIcon icon;
  10. if( maxOrNormal ){
  11. icon = style()->standardIcon( QStyle::SP_TitleBarNormalButton );
  12. ui->btn_max_nor->setIcon( icon );
  13. setWindowState( Qt::WindowMaximized );
  14. }else {
  15. icon = style()->standardIcon( QStyle::SP_TitleBarMaxButton );
  16. ui->btn_max_nor->setIcon( icon );
  17. setWindowState( Qt::WindowNoState );
  18. }
  19. maxOrNormal = !maxOrNormal;
  20. }
  21. void MainWindow::onClose(bool)
  22. {
  23. close();
  24. }
5.注意事项

1)设置窗口最大化、最小化、原状态也可以使用如下方法

  1. showMaximized();
  2. showMinimized();
  3. showNormal();
2)窗口normal状态是Qt:WindowNoState, 关于Qt::WindowStates有如下几种:

  1. Constant Value Description
  2. Qt::WindowNoState 0x00000000 The window has no state set (in normal state).
  3. Qt::WindowMinimized 0x00000001 The window is minimized (i.e. iconified).
  4. Qt::WindowMaximized 0x00000002 The window is maximized with a frame around it.
  5. Qt::WindowFullScreen 0x00000004 The window fills the entire screen without any frame around it.
  6. Qt::WindowActive 0x00000008 The window is the active window, i.e. it has keyboard focus.








声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/95007
推荐阅读
相关标签
  

闽ICP备14008679号