当前位置:   article > 正文

Qt之界面实现技巧——包括任务栏不显示,自定义窗体,最大化最小化按钮等等全面总结_qt最大化最小化

qt最大化最小化

    总结一下,在开发Qt的过程中的一些技巧!可遇而不可求。。。

一、主界面
1、窗口 最小化 最大化 关闭按钮、显示状态自定义
  1. setWindowFlags(Qt::CustomizeWindowHint);
  2. setWindowFlags(Qt::WindowCloseButtonHint); //只要关闭按钮
  3. setWindowFlags(Qt::WindowFlags type)
  4. Qt::FrameWindowHint:没有边框的窗口
  5. Qt::WindowStaysOnTopHint: //总在最上面的窗口
  6. Qt::CustomizeWindowHint: //自定义窗口标题栏,以下标志必须与这个标志一起使用才有效,否则窗口将有默认的标题栏
  7. Qt::WindowTitleHint //显示窗口标题栏
  8. Qt::WindowSystemMenuHint //显示系统菜单
  9. Qt::WindowMinimizeButtonHint //显示最小化按钮
  10. Qt::WindowMaximizeButtonHint //显示最大化按钮
  11. Qt::WindowMinMaxButtonsHint //显示最小化按钮和最大化按钮
  12. Qt::WindowCloseButtonHint //显示关闭按钮
2、隐藏任务栏显示(可制作悬浮窗口)
    setWindowFlags(Qt::Tool | Qt::X11BypassWindowManagerHint)
3、关闭按钮实现的功能
  1. hide(); //进行界面隐藏,但是显示托盘,可通过点击托盘实现界面的重新显示
  2. quit(); //退出系统
4、绘制背景图片并且实现圆角效果
  1. void paintEvent(QPaintEvent *)
  2. {
  3. QPainter painter(this);
  4. QBrush brush;
  5. brush.setTextureImage(QImage(background_image)); //背景图片
  6. painter.setBrush(brush);
  7. painter.setPen(Qt::black); //边框色
  8. painter.drawRoundedRect(this->rect(), 5, 5); //圆角5像素
  9. }
5、设置应用程序的字体
  1. QFont font("Courier", 10, QFont::Normal, false);
  2. QApplication::setFont(font);
6、设置字体
  1. QFont font = this->font();
  2. font.setFamily("Courier"); //字体名称
  3. font.setPixelSize(16); //字体点大小
  4. font.setPointSize(18); //字体像素大小
  5. font.setBold(true); //是否加粗
  6. font.setItalic(true); //是否斜体
  7. font.setUnderline(true); //是否下划线
  8. this->setFont(font);
  9. 字体风格,包括类型、大小、是否加粗、是否斜体等!
  10. 也可使用:setStyleSheet("text-align:center; font-size:18px; font-weight:bold; font-style:Courier; color:white; ");
  11. setAlignment(Qt::AlignCenter); //设置对齐方式
7、超链接
  1. QLabel *pLabel = new QLabel(this);
  2. pLabel->setText(QStringLiteral("超链接"));
  3. pLabel->setFixedSize(200,100);
  4. connect(pLabel,SIGNAL(linkActivated(QString)),this,SLOT(openUrl(QString)));
  5. QDesktopServices::openUrl(QUrl(url)); //openUrl槽里面实现
  6. pLabel->setOpenExternalLinks(true);
  7. pLabel->setText("新浪");
8、打开本地文件(夹)
    QDesktopServices::openUrl(QUrl::fromLocalFile(local_file));
9、显示窗口并激活/提升
  1.   showNormal();
  2. raise();
  3. activateWindow();
10、设置滚动条值
  1. pTextEdit->verticalScrollBar()->setValue(0); //滚动到最顶层
  2. pTextEdit->verticalScrollBar()->setValue(pTextEdit->verticalScrollBar()->maximum()); //滚动到最底层
11、QToolBar添加拉伸(弹簧)
原以为QToolBar可以通过addStretch()来实现,不想没有此接口,则可通过下来方式实现:
  1. QWidget *pWidget = new QWidget(this);
  2. pWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
  3. pToolBar->addWidget(pWidget);
12、QProgressBar进度条设置文本、样式
  1.   QProgressBar *pProgressBar = new QProgressBar(this);
  2. pProgressBar->setFixedSize(150, 10);
  3. pProgressBar->setToolTip(QStringLiteral("离下一等级还需要1500经验"));
  4. pProgressBar->setFormat("12345/50000");
  5. pProgressBar->setMaximum(100);
  6. pProgressBar->setValue(10);
  7. QString strQSS = "QProgressBar {color: white;} \
  8. QProgressBar:horizontal { \
  9. text-align: center; \
  10. border: 1px solid rgb(115, 200, 60); \
  11. background: rgb(145, 210, 75, 150); \
  12. } \
  13. QProgressBar::chunk:horizontal { \
  14. background: rgb(145, 210, 75); \
  15. }";
  16. pProgressBar->setStyleSheet(strQSS);
二、全屏显示与还原
1、遮挡任务栏
  1. showFullScreen()
  2. showMaximized() 这两个都可以!
2、不遮挡任务栏
  1. void showMaximize()
  2. {
  3. //若已经最大化
  4. if(is_max)
  5. {
  6. //恢复界面位置,并设置按钮图标为最大化图标,提示“最大化”
  7. this->setGeometry(location);
  8. max_button->setIcon(QIcon("maxbtn"));
  9. max_button->setToolTip(tr("max"));
  10. }
  11. else
  12. {
  13. //设定当前界面的位置,还原时使用
  14. location = this->geometry();
  15. //获取桌面位置,设置为最大化,并设置按钮图标为还原图标,提示“还原”
  16. QDesktopWidget *desk = QApplication::desktop();
  17. this->setGeometry(desk->availableGeometry());
  18. max_button->setIcon(QIcon("restorbtn"));
  19. max_button->setToolTip(tr("restor"));
  20. }
  21. is_max = !is_max;
  22. }

  注:窗口既然可以最大化,当然还要进行还原,is_max为一个bool值变量,表示窗口是否最大化,初始值为false。location为桌面的位置,每次最大化开始先记录当前的位置,等待还原时候使用。

三、QSS样式
1、QComboBox
  1. comboBox->setStyleSheet("QComboBox{border:1px solid gray;}"
  2. "QComboBox QAbstractItemView::item{height:25px;}"
  3. "QComboBox::down-arrow{image:url(:/icon/arrowdown);}"
  4. "QComboBox::drop-down{border:0px;}");
  5. comboBox->setView(new QListView());
(包括设置下拉箭头、下拉选项高度等)、
2、QSpinBox
  1. pSpinBox->setStyleSheet("QSpinBox{border:1px solid gray;}"
  2. "QSpinBox::up-button{image:url(:/icon/arrow_up);}"
  3. "QSpinBox::down-button{image:url(:/icon/arrow_down);}");
 
3、QMenu
  1. QMenu{
  2. padding:5px;
  3. background:white;
  4. border:1px solid gray;
  5. }
  6. QMenu::item{
  7. padding:0px 40px 0px 30px;
  8. height:25px;
  9. }
  10. QMenu::item:selected:enabled{
  11. background:lightgray;
  12. color:white;
  13. }
  14. QMenu::item:selected:!enabled{
  15. background:transparent;
  16. }
  17. QMenu::separator{
  18. height:1px;
  19. background:lightgray;
  20. margin:5px 0px 5px 0px;
  21. }
 
4、QSlider
  1. QSlider::groove:horizontal{
  2. border:0px;
  3. height:4px;
  4. }
  5. QSlider::sub-page:horizontal{
  6. background:white;
  7. }
  8. QSlider::add-page:horizontal{
  9. background:lightgray;
  10. }
  11. QSlider::handle:horizontal{
  12. background:white;
  13. width:10px;
  14. border-radius:5px;
  15. margin:-3px 0px -3px 0px;
  16. }
 
5、QCheckBox
  1. QCheckBox{
  2. spacing: 2px;
  3. }
  4. QCheckBox::indicator {
  5. width: 20px;
  6. height: 20px;
  7. }
  8. QCheckBox::indicator:unchecked {
  9. image: url(:/login/checkbox);
  10. }
  11. QCheckBox::indicator:unchecked:hover {
  12. image: url(:/login/checkbox_hover);
  13. }
  14. QCheckBox::indicator:unchecked:pressed {
  15. image: url(:/login/checkbox_press);
  16. }
  17. QCheckBox::indicator:checked {
  18. image: url(:/login/checkbox_selected);
  19. }
  20. QCheckBox::indicator:checked:hover {
  21. image: url(:/login/checkbox_selected_hover);
  22. }
  23. QCheckBox::indicator:checked:pressed {
  24. image: url(:/login/checkbox_selected_press);
  25. }
 
6、QScrollBar
  1. 水平滚动条
  2. QScrollBar:horizontal {
  3. max-height: 9px;
  4. background: transparent;
  5. padding-left: 9px;
  6. padding-right: 9px;
  7. }
  8. QScrollBar::handle:horizontal {
  9. height: 9px;
  10. min-width: 20px;
  11. background: rgb(190, 190, 190);
  12. }
  13. QScrollBar::handle:horizontal:hover {
  14. background: rgb(170, 170, 170);
  15. }
  16. QScrollBar::sub-line:horizontal {
  17. height: 9px;
  18. width: 9px;
  19. background: rgb(220, 220, 220);
  20. border-image: url(:/CalcSetting/ArrowLeft);
  21. subcontrol-position: left;
  22. }
  23. QScrollBar::add-line:horizontal {
  24. height: 9px;
  25. width: 9px;
  26. background: rgb(220, 220, 220);
  27. border-image: url(:/CalcSetting/ArrowRight);
  28. subcontrol-position: right;
  29. }
  30. QScrollBar::sub-line:horizontal:hover {
  31. background: rgb(190, 190, 190);
  32. border-image: url(:/CalcSetting/ArrowLeftHover);
  33. }
  34. QScrollBar::add-line:horizontal:hover {
  35. background: rgb(190, 190, 190);
  36. border-image: url(:/CalcSetting/ArrowRightHover);
  37. }
  38. QScrollBar::add-page:horizontal,QScrollBar::sub-page:horizontal {
  39. background: rgb(220, 220, 220);
  40. }
  41. 垂直滚动条
  42. QScrollBar:vertical {
  43. max-width: 9px;
  44. background: transparent;
  45. padding-top: 9px;
  46. padding-bottom: 9px;
  47. }
  48. QScrollBar::handle:vertical {
  49. width: 9px;
  50. min-height: 20px;
  51. background: rgb(190, 190, 190);
  52. }
  53. QScrollBar::handle:vertical:hover {
  54. background: rgb(170, 170, 170);
  55. }
  56. QScrollBar::sub-line:vertical {
  57. height: 9px;
  58. width: 9px;
  59. background: rgb(220, 220, 220);
  60. border-image: url(:/CalcSetting/ArrowTop);
  61. subcontrol-position: top;
  62. }
  63. QScrollBar::add-line:vertical {
  64. height: 9px;
  65. width: 9px;
  66. background: rgb(220, 220, 220);
  67. border-image: url(:/CalcSetting/ArrowBottom);
  68. subcontrol-position: bottom;
  69. }
  70. QScrollBar::sub-line:vertical:hover {
  71. background: rgb(190, 190, 190);
  72. border-image: url(:/CalcSetting/ArrowTopHover);
  73. }
  74. QScrollBar::add-line:vertical:hover {
  75. background: rgb(190, 190, 190);
  76. border-image: url(:/CalcSetting/ArrowBottomHover);
  77. }
  78. QScrollBar::add-page:vertical,QScrollBar::sub-page:vertical {
  79. background: rgb(220, 220, 220);
  80. }
 
7、QStatusBar
 
  1. QStatusBar::item{
  2. border: 0px;
  3. }
  4. //不存在分隔线
8、QComboBox
 
  1. QComboBox {
  2. border-image: url(:/OverdraftControl/comboBox);
  3. }
  4. QComboBox:hover {
  5. border-image: url(:/OverdraftControl/comboBoxHover);
  6. }
  7. QComboBox:pressed {
  8. border-image: url(:/OverdraftControl/comboBoxPressed);
  9. }
  10. QComboBox::down-arrow {
  11. image: none;
  12. }
  13. QComboBox::drop-down {
  14. width: 15px;
  15. border: none;
  16. }
  17. QComboBox QAbstractItemView {
  18. border: 1px solid lightgray;
  19. outline: 0px; //去掉item虚线
  20. }
  21. QComboBox QAbstractItemView::item {
  22. color: black;
  23. height: 22px;
  24. border: 1px solid transparent;
  25. }
  26. QComboBox QAbstractItemView::item:selected {
  27. border: 1px solid rgb(170, 190, 230);
  28. background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 rgb(230, 240, 250), stop: 0.5 rgb(220, 235, 255), stop: 1.0 rgb(210, 230, 255));
  29. }
一般也可以使用QPalette
 
  1. QPalette palette;
  2. palette.setBrush(QPalette::WindowText, QBrush(Qt::white));
  3. pCheckBox->setPalette(palette);
  4. pCheckBox->setStyleSheet("color:white");
调色板类QPalette提供了颜色角色(color roles)的概念,指当前界面中颜色的职责,通过枚举变量QPalette::ColorRole来定义,比较常用的角色有:
 
  1. QPalette::Window 通常指窗口部件背景色
  2. QPalette::WindowText 通常指窗口部件的前景色
  3. QPalette::Base 指文本的背景色(QTextEdit、QLineEdit等)
  4. QPalette::Text 与QPalette::Base一块使用,指文本输入窗口部件前景色
  5. QPalette::Button 指按钮窗口部件的背景色
  6. QPalette::ButtonText 指按钮窗口部件的前景色
    
    以上是遇到的常用但有资料较少的组件的样式,注重细节才能做出好的产品!
 
 

注:

    技术在于交流、沟通,转载请注明出处并保持作品的完整性。

    作者:╰☆奋斗ing❤孩子`  原文:新浪博客

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

闽ICP备14008679号