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:

#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

  • 25
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt 中,可以使用 QToolBar 类创建一个工具栏。工具栏通常用于显示常用的工具按钮,例如“打开”、“保存”、“剪切”、“复制”、“粘贴”等等。如果你想要将 QToolBar 用作导航栏,则可以将其按钮设置为导航按钮,例如“前进”、“后退”、“主页”等等。 以下是一个简单的示例代码,演示如何在 Qt 中创建一个 QToolBar 导航栏: ```cpp #include <QtWidgets> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建主窗口 QMainWindow mainWindow; // 创建工具栏 QToolBar *toolbar = new QToolBar(&mainWindow); toolbar->setMovable(false); // 禁止移动工具栏 // 创建导航按钮 QAction *backAction = new QAction(QIcon(":/images/back.png"), "Back", &mainWindow); QAction *forwardAction = new QAction(QIcon(":/images/forward.png"), "Forward", &mainWindow); QAction *homeAction = new QAction(QIcon(":/images/home.png"), "Home", &mainWindow); // 将导航按钮添加到工具栏 toolbar->addAction(backAction); toolbar->addAction(forwardAction); toolbar->addAction(homeAction); // 将工具栏添加到主窗口 mainWindow.addToolBar(toolbar); // 显示主窗口 mainWindow.show(); return app.exec(); } ``` 在这个示例中,我们创建了三个导航按钮:Back、Forward 和 Home。这些按钮都是 QAction 对象,并且每个按钮都有一个图标和一个文本标签。我们将这些 QAction 对象添加到了 QToolBar 对象中,并将工具栏添加到了 QMainWindow 对象中。 这只是一个简单的示例,你可以根据需要自定义工具栏和导航按钮的样式和行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值