[QT开发 06_QMainWindow]

本文详细介绍了Qt中QMainWindow的基本结构,包括菜单栏的创建与操作、工具栏的使用、状态栏的功能、QDockWidget的浮动窗口以及核心部件的应用。同时涉及如何处理资源文件和UI设计,展示了如何加载图片到菜单项和设置窗口背景。
摘要由CSDN通过智能技术生成

知识点1:QMainWindow概述

QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个铆接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget)。

知识点2:菜单栏​​​​​​

一个主窗口最多只有一个菜单栏。位于主窗口顶部、主窗口标题栏下面。enu

  • 创建菜单栏,通过QMainWindow类的menu Bar( ) 函数获取主窗口菜单栏指针。

创建菜单栏:

        #include<QMenuBar>

        QMenuBar---->QMenuBar(QWidget*parent=Q_NULLPTR)

添加菜单栏:

        QMainWindow---->void setMenuBar(QMenuBar*menuBar)

  • 创建菜单栏,调用QMenu的成员函数addMenu来添加菜单

创建菜单:

        #include<QMenu>

        QMenu---->QMenu(const QString &title,QWidget*parent=Q_NULLPTR)

添加菜单:

        MenuBer---->QAction*addMenu(QMenu*menu)

菜单栏类QMenuBar

菜单类QMenu

QAction类:充当子菜单(菜单项) 

#include "mainwindow.h"
#include <QMenuBar>
#include <QMenu>
#include <QAction>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    resize(600,400);
    //创建菜单栏
    QMenuBar *menubar= new QMenuBar(this);
    this->setMenuBar(menubar);

    //创建菜单
    QMenu *menu1=new QMenu("文件");
    QMenu *menu2=new QMenu("编辑");
    QMenu *menu3=new QMenu("构建");

    menubar->addMenu(menu1);
    menubar->addMenu(menu2);
    menubar->addMenu(menu3);

    //创建菜单项
    QAction *act1=new QAction("打开文件");
    QAction *act2=new QAction("另存为");
    QAction *act3=new QAction("关闭文件");
    menu1->addAction(act1);
    menu1->addAction(act2);
    menu1->addAction(act3);
}


MainWindow::~MainWindow()
{

}

补充:

另一种创建菜单栏的方式(成员函数)

点击菜单项,实现对应功能

connect(act3,&QAction::trigger,this,&QMainWindow::close);
点击act3中的按钮,会触发这个信号&QAction::triggered,this接收到这个信号会执行close

知识点3:工具栏

需要包含头文件#include <QToolBar>

QAction类既可以当菜单项,又可以当工具项

工具栏类QToolBar:

QAction:

    //创建工具栏
    QToolBar *toolbar=new QToolBar(this);
//    this->addToolBar(toolbar);//这个函数有两个参数,第一个参数省略了,没有第一个参数就默认将工具栏放在上边。
    this->addToolBar(Qt::LeftToolBarArea,toolbar);//这个是加上第一个参数,表示工具栏默认停靠在左侧。

    //创建工具项
    QAction *act4 = new QAction("工具");
    toolbar->addAction(act1);
    toolbar->addAction(act2);
    toolbar->addAction(act3);
    toolbar->addAction(act4);

    
    //使用setAllowerAreas()函数指定工具条停靠区域
//    toolbar->setAllowedAreas(Qt::LeftToolBarArea|Qt::RightToolBarArea);//可以将工具条停靠在左侧或右侧。

    
    //修改工具栏不可移动(默认可以上下左右移动)
//    toolbar->setMovable(false);     //这条语句使工具条不可以移动

    
    //设置工具栏的浮动状态。(默认可悬浮窗口)
    toolbar->setFloatable(false);//这个是工具栏不能浮动。

知识点4:状态栏

状态栏最多只能有一个。在状态栏中可以放标签,也可以放按钮。

添加头文件 #include<QStatusBar>

状态栏信息分类:

临时信息

正式信息

永久信息

//创建状态栏
    QStatusBar *statusbar=statusBar();//创建状态栏的第一种方式
//    QStatusBar *statusbar=new QStatusBar(this);//创建状态栏的第二种方式
    this->setStatusBar(statusbar);

    //增加临时信息
    statusbar->showMessage("页面显示成功",3000);    //后面的3000表示显示时间,如果没有,就会一直显示。

    //增加正式信息(一般位于状态栏左侧)
    QLabel *label1=new QLabel("打开文件",this);
    statusbar->addWidget(label1);   //addWidget将控件添加到左边栏

    //增加永久信息(一般位于状态栏右侧)
    QLabel *label2=new QLabel("www.qf.com",this);
    statusbar->addPermanentWidget(label2);      //addPermanentWidget将控件添加到右边栏

知识点5:铆接部件(浮动窗口)

铆接部件 QDockWidget,也称浮动窗口,可以有多个。

添加头文件:#include <QDockWidget>

    //创建铆接部件
    QDockWidget *dockwidget = new QDockWidget("first",this);    //第一个参数为铆接部件的名字,可以不写。
    this->addDockWidget(Qt::TopDockWidgetArea,dockwidget);

知识点6:核心部件(中心部件)

核心部件头文件:        #include <QTextEdit> 

除了以上几个部件,中心显示的部件都可以作为核心部件,例如一个记事本文件,可以利用QTextEdit做核心部件。

    //创建记事本作为核心部件
    QTextEdit * edit = new QTextEdit("文本编辑器",this);
    this->setCentralWidget(edit);

知识点7:资源文件

Qt,资源系统是一个跨平台的资源机制,用于将程序运行时所需要的资源以二进制的形式存储于可执行文件内部。如果你的程序需要加载特定的资源(图标、文本翻译等)那么将其放置在资源文件中,就再也不需要担心这些文件的丢失。也就是说如果你将资源以资源文件的形式存储,它是会编译到可执行文件内部的。

加载资源:

步骤1:新增资源文件(右键工程,新增资源文件)

步骤2:给资源文件增加前缀(是为了方便我们去寻找到资源)

步骤3:给资源文件增加资源(这个资源就是图片)

步骤4:起别名(选用)

1、给菜单项加载图片

使用Qt Creator 可以很方便的创建资源文件。我们可以在工程上点击右键,选择 “ 添加新文件.....”可以在Qt 分类下找到  " Qt资源文件"。

    //给菜单项增加一个图片
    //创建一个图片控件
    QPixmap pix;
    //选择图片
    pix.load(":/new/open");//冒号后面是图片在Resources中的路径
    //给菜单项设置图片
    act1->setIcon(QIcon(pix));

2、给项目加载背景

//设置窗口的背景图
    this->setFixedSize(800,600);        //将窗口固定一下大小
    this->setAutoFillBackground(true);   //这个表示允许给窗口设置背景图。
    //创建图片控件
    QPixmap pix=QPixmap(":/open").scaled(this->size());     //前面的表示路径.设置图片大小。      
//    pix.load(":/open");   //方式1
    //pix定义的是一个图片控件
    
    QPalette palette;
    palette.setBrush(QPalette::Background,QBrush(pix));
    this->setPalette(palette);

知识点8:UI

UI功能:绘制界面

文件:

打开文件

关闭文件

另存为文件

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值