栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 

//引入窗体头文件   
#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 

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1010471.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号