qt学习之旅

您所在的位置:网站首页 toolbag翻译 qt学习之旅

qt学习之旅

#qt学习之旅| 来源: 网络整理| 查看: 265

一、实现功能:

        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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3