• qt学习之旅--QToolBar的使用(一)


    一、实现功能:

            1、显示图标+文字,上下两排显示
            2、取消前面竖排的小圆点
            3、点击菜单栏就切换窗口

    二、实现结果:

     

    三、实现过程:

    3.1、前言

    最开始说菜单栏,首先想到的就是QMenu,打算用connect连接SIGNAL(triggered())和SLOT(XXX),结果运行程序出现如下错误:
    QObject::connect: No such signal QMenu::triggered()
    后发现有博客说这样是行不通的,因为QMenu相当于是一个Label的作用,并不能执行任何的操作,要么就QMenu下添加一个QAction来实现。

    3.2、QToolBar实现步骤

    于是乎转念一想,可以使用QToolBar实现:

    3.2.1、添加工具栏

    3.2.2、工具栏新建动作

     3.2.3、添加图标资源

    添加图标之前,我们得先添加资源:(步骤截图)   

     3.2.4、工具栏添加图标

     3.2.5、图标+文本,取消竖排小圆点,修改图标大小,修改文本样式

    这些均在QToolBar的属性栏中修改

    3.3、实现切换窗口

    3.3.1、新建窗体对象

    新建的mainform.ui就可以创建我们想要的内容了

    3.3.2、 编码

    mainwindow.h:

    1. #ifndef MAINWINDOW_H
    2. #define MAINWINDOW_H
    3. #include <QMainWindow>
    4. //引入窗体头文件
    5. #include "mainform.h"
    6. #include "monitorform.h"
    7. #include "navigationform.h"
    8. namespace Ui {
    9. class MainWindow;
    10. }
    11. class MainWindow : public QMainWindow
    12. {
    13. Q_OBJECT
    14. public:
    15. explicit MainWindow(QWidget *parent = 0);
    16. ~MainWindow();
    17. private:
    18. Ui::MainWindow *ui;
    19. public:
    20. int AppWidth; // 屏宽
    21. int AppHeight; // 屏高
    22. MainForm* mainForm; //主界面窗体对象
    23. NavigationForm* navigationForm; //导航窗体对象
    24. MonitorForm* monitorForm; //监控窗体对象
    25. void CreateNewForms(); //创建窗体
    26. void ShowForms(quint8 mIdx); //展示窗体
    27. private slots:
    28. //动作触发槽函数
    29. void on_mainaction_triggered();
    30. void on_monitoraction_triggered();
    31. void on_navigationaction_triggered();
    32. };
    33. #endif // MAINWINDOW_H

     mainwindow.cpp:

    1. #include "mainwindow.h"
    2. #include "ui_mainwindow.h"
    3. #include <QDesktopWidget>
    4. static uint oldFormIdx=0;//记录当前界面下标
    5. MainWindow::MainWindow(QWidget *parent) :
    6. QMainWindow(parent),
    7. ui(new Ui::MainWindow)
    8. {
    9. ui->setupUi(this);
    10. 取消窗体的最大化、最小化、托盘管理
    11. Qt::WindowFlags flag=0;
    12. flag=Qt::Window|Qt::WindowCloseButtonHint|Qt::MSWindowsFixedSizeDialogHint;
    13. flag&=~Qt::WindowContextHelpButtonHint;
    14. flag&=~Qt::WindowMinMaxButtonsHint;
    15. setWindowFlags(flag);
    16. 实现窗口固定最大化
    17. QDesktopWidget* desk=QApplication::desktop(); //获取桌面控件
    18. QRect rect=desk->screenGeometry(); //获取可用桌面大小
    19. AppWidth=rect.width(); //取得屏幕桌面宽
    20. AppHeight=rect.height(); //取得屏幕桌面高
    21. resize(AppWidth,AppHeight);
    22. setFixedSize(AppWidth,AppHeight); //设置固定窗口大小
    23. move(-2,0); //移动窗口位置
    24. this->setWindowTitle("ROV"); //窗口名称
    25. this->setContextMenuPolicy(Qt::NoContextMenu); //设置右健菜单,五个枚举:Qt::NoContextMenu(小部件没有上下文菜单,上下文菜单的处理被推迟到小部件的父级)
    26. 设置背景颜色
    27. QPalette palette(this->palette()); //QPalette是Qt中的调色板类,它提供的setColor()函数可改变控件的颜色
    28. palette.setColor(QPalette::Background,QColor(175,175,175));
    29. this->setPalette(palette);
    30. CreateNewForms();
    31. ShowForms(0);
    32. }
    33. void MainWindow::CreateNewForms()
    34. {
    35. mainForm= new MainForm(this); //创建窗体指针对象
    36. mainForm->setAttribute(Qt::WA_DeleteOnClose); //widget将会被释放。不管widget是否可见,关闭事件都会传递给widget。
    37. //即接收到QCloseEvent事件后,除了调用hide()方法将窗口隐藏,同时会调用deleteLater()方法将窗口释放掉,不会再占用资源。
    38. mainForm->resize(1440,920); //窗口大小
    39. mainForm->move(10,40); //窗口位置
    40. navigationForm= new NavigationForm(this);
    41. navigationForm->setAttribute(Qt::WA_DeleteOnClose);
    42. navigationForm->resize(1440,920);
    43. navigationForm->move(10,40);
    44. monitorForm= new MonitorForm(this);
    45. monitorForm->setAttribute(Qt::WA_DeleteOnClose);
    46. monitorForm->resize(1440,920);
    47. monitorForm->move(10,40);
    48. this->monitorForm->hide(); //隐藏窗体
    49. this->navigationForm->hide(); //隐藏窗体
    50. }
    51. void MainWindow::ShowForms(quint8 mIdx)
    52. {
    53. if(oldFormIdx!=mIdx)
    54. {
    55. switch(mIdx)
    56. {
    57. case 0:
    58. mainForm->show();
    59. break;
    60. case 1:
    61. monitorForm->show();
    62. break;
    63. case 2:
    64. navigationForm->show();
    65. break;
    66. }
    67. switch(oldFormIdx)
    68. {
    69. case 0:
    70. mainForm->hide();
    71. break;
    72. case 1:
    73. monitorForm->hide();
    74. break;
    75. case 2:
    76. navigationForm->hide();
    77. break;
    78. }
    79. oldFormIdx=mIdx;
    80. }
    81. }
    82. //槽函数
    83. void MainWindow::on_mainaction_triggered()
    84. {
    85. ShowForms(0);
    86. }
    87. void MainWindow::on_monitoraction_triggered()
    88. {
    89. ShowForms(1);
    90. }
    91. void MainWindow::on_navigationaction_triggered()
    92. {
    93. ShowForms(2);
    94. }
    95. MainWindow::~MainWindow()
    96. {
    97. delete mainForm;
    98. delete monitorForm;
    99. delete navigationForm;
    100. delete ui;
    101. }

     四、我的源码

     链接:https://pan.baidu.com/s/1Otd-Y_AEsIadZza005ZeKA?pwd=qe9k 
    提取码:qe9k

  • 相关阅读:
    软件测试中如何测试算法?
    【7.21-26】代码源 - 【平方计数】【字典序最小】【“Z”型矩阵】
    Linux /dev目录详解和Linux系统各个目录的作用
    SpringBoot扩展点EnvironmentPostProcessor
    React学习计划-react-hooks补充
    嵌入式设备时间同步(校时)
    可视化规则引擎
    (附源码)ssm汽车租赁 毕业设计 271621
    裸辞—躺平—刷题—大厂(Android面试的几大技巧)
    golang中的错误处理
  • 原文地址:https://blog.csdn.net/qq_40594137/article/details/125604792