1、显示图标+文字,上下两排显示
2、取消前面竖排的小圆点
3、点击菜单栏就切换窗口
最开始说菜单栏,首先想到的就是QMenu,打算用connect连接SIGNAL(triggered())和SLOT(XXX),结果运行程序出现如下错误:
QObject::connect: No such signal QMenu::triggered()
后发现有博客说这样是行不通的,因为QMenu相当于是一个Label的作用,并不能执行任何的操作,要么就QMenu下添加一个QAction来实现。
于是乎转念一想,可以使用QToolBar实现:
添加图标之前,我们得先添加资源:(步骤截图)
这些均在QToolBar的属性栏中修改
新建的mainform.ui就可以创建我们想要的内容了
mainwindow.h:
- #ifndef MAINWINDOW_H
- #define MAINWINDOW_H
-
- #include <QMainWindow>
-
- //引入窗体头文件
- #include "mainform.h"
- #include "monitorform.h"
- #include "navigationform.h"
-
- namespace Ui {
- class MainWindow;
- }
-
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
-
- public:
- explicit MainWindow(QWidget *parent = 0);
- ~MainWindow();
-
- private:
- Ui::MainWindow *ui;
-
- public:
- int AppWidth; // 屏宽
- int AppHeight; // 屏高
-
- MainForm* mainForm; //主界面窗体对象
- NavigationForm* navigationForm; //导航窗体对象
- MonitorForm* monitorForm; //监控窗体对象
-
- void CreateNewForms(); //创建窗体
- void ShowForms(quint8 mIdx); //展示窗体
-
-
- private slots:
- //动作触发槽函数
- void on_mainaction_triggered();
- void on_monitoraction_triggered();
- void on_navigationaction_triggered();
- };
-
- #endif // MAINWINDOW_H
mainwindow.cpp:
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include <QDesktopWidget>
-
- static uint oldFormIdx=0;//记录当前界面下标
-
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
-
- 取消窗体的最大化、最小化、托盘管理
- Qt::WindowFlags flag=0;
- flag=Qt::Window|Qt::WindowCloseButtonHint|Qt::MSWindowsFixedSizeDialogHint;
- flag&=~Qt::WindowContextHelpButtonHint;
- flag&=~Qt::WindowMinMaxButtonsHint;
- setWindowFlags(flag);
-
- 实现窗口固定最大化
- QDesktopWidget* desk=QApplication::desktop(); //获取桌面控件
- QRect rect=desk->screenGeometry(); //获取可用桌面大小
- AppWidth=rect.width(); //取得屏幕桌面宽
- AppHeight=rect.height(); //取得屏幕桌面高
- resize(AppWidth,AppHeight);
- setFixedSize(AppWidth,AppHeight); //设置固定窗口大小
- move(-2,0); //移动窗口位置
- this->setWindowTitle("ROV"); //窗口名称
- this->setContextMenuPolicy(Qt::NoContextMenu); //设置右健菜单,五个枚举:Qt::NoContextMenu(小部件没有上下文菜单,上下文菜单的处理被推迟到小部件的父级)
-
- 设置背景颜色
- QPalette palette(this->palette()); //QPalette是Qt中的调色板类,它提供的setColor()函数可改变控件的颜色
- palette.setColor(QPalette::Background,QColor(175,175,175));
- this->setPalette(palette);
-
- CreateNewForms();
- ShowForms(0);
- }
-
- void MainWindow::CreateNewForms()
- {
- mainForm= new MainForm(this); //创建窗体指针对象
- mainForm->setAttribute(Qt::WA_DeleteOnClose); //widget将会被释放。不管widget是否可见,关闭事件都会传递给widget。
- //即接收到QCloseEvent事件后,除了调用hide()方法将窗口隐藏,同时会调用deleteLater()方法将窗口释放掉,不会再占用资源。
- mainForm->resize(1440,920); //窗口大小
- mainForm->move(10,40); //窗口位置
-
- navigationForm= new NavigationForm(this);
- navigationForm->setAttribute(Qt::WA_DeleteOnClose);
- navigationForm->resize(1440,920);
- navigationForm->move(10,40);
-
- monitorForm= new MonitorForm(this);
- monitorForm->setAttribute(Qt::WA_DeleteOnClose);
- monitorForm->resize(1440,920);
- monitorForm->move(10,40);
-
- this->monitorForm->hide(); //隐藏窗体
- this->navigationForm->hide(); //隐藏窗体
- }
-
- void MainWindow::ShowForms(quint8 mIdx)
- {
- if(oldFormIdx!=mIdx)
- {
- switch(mIdx)
- {
- case 0:
- mainForm->show();
- break;
- case 1:
- monitorForm->show();
- break;
- case 2:
- navigationForm->show();
- break;
- }
-
- switch(oldFormIdx)
- {
- case 0:
- mainForm->hide();
- break;
- case 1:
- monitorForm->hide();
- break;
- case 2:
- navigationForm->hide();
- break;
- }
-
- oldFormIdx=mIdx;
- }
- }
-
- //槽函数
- void MainWindow::on_mainaction_triggered()
- {
- ShowForms(0);
- }
- void MainWindow::on_monitoraction_triggered()
- {
- ShowForms(1);
- }
- void MainWindow::on_navigationaction_triggered()
- {
- ShowForms(2);
- }
- MainWindow::~MainWindow()
- {
- delete mainForm;
- delete monitorForm;
- delete navigationForm;
-
- delete ui;
- }
链接:https://pan.baidu.com/s/1Otd-Y_AEsIadZza005ZeKA?pwd=qe9k
提取码:qe9k