• 【Qt】QMainWindow


    QMainWindow简介

    QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等

    img


    细节:只有一个的内容,将其设置到窗口的函数以set开头,可以有多个的内容,将其设置到窗口的函数以add开头


    菜单栏

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

    创建菜单栏

    //创建菜单栏 =>最多只能有一个
    QMenuBar* bar = menuBar();//获取主窗口菜单栏指针   
    setMenuBar(bar);//将菜单栏放入窗口中,空菜单栏默认什么都没有
    
    • 1
    • 2
    • 3

    该函数是已经封装好的,只需要如此创建即可,不需要在构造对象的时候传入父类的指针

    添加菜单

    //创建菜单
    QMenu* fileMenu = bar->addMenu("文件");
    QMenu* editMenu = bar->addMenu("编辑");
    
    • 1
    • 2
    • 3

    创建菜单项

    //为菜单添加菜单项
    QAction* newAction = fileMenu->addAction("新建");
    fileMenu->addSeparator();//两个菜单项(新建和打开)之间的分割线
    QAction* openAction = fileMenu->addAction("打开");
    
    • 1
    • 2
    • 3
    • 4

    Qt 并没有专门的菜单项类,只是使用一个QAction类,抽象出公共的动作。当我们把QAction对象添加到菜单


    工具栏

    主窗口的工具栏上可以有多个工具条,通常采用一个菜单对应一个工具条的的方式,也可根据需要进行工具条的划分

    注意:工具条是一个可移动的窗口,它的停靠区域由QToolBar的allowAreas决定,包括的选项为:

    • Qt::LeftToolBarArea 停靠在左侧

    • Qt::RightToolBarArea 停靠在右侧

    • Qt::TopToolBarArea 停靠在顶部

    • Qt::BottomToolBarArea 停靠在底部

    • Qt::AllToolBarAreas 以上四个位置都可停靠

    可以使用setAllowedAreas()函数指定停靠区域使用setMoveable(bool flag = true)函数设定工具栏的可移动性,默认参数为true,如果为false,表明工具条不可移动, 只能停靠在初始化的位置上

    //工具栏 =>可以有多个
    QToolBar* toolBar = new QToolBar(this);//将当前对象放到对象树当中
    
    //将工具栏放入到当前窗口当中,否则不显示
    //addToolBar(toolBar);
    
    //可以指定工具栏最初放到哪一边
    addToolBar(Qt::LeftToolBarArea, toolBar);//将工具栏默认最初放在左边 	第一个参数:默认停靠区域 第二个参数:工具栏指针
    
    //将工具栏设置成 只允许左右停靠
    toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
    
    //设置工具栏是否可以浮动,默认是可以的,参数为true
    toolBar->setFloatable(false);
    
    //设置工具栏是否可以移动,默认可以(总开关函数,如果关闭了,那么上述的设置都没有意义)
    //toolBar->setMovable(false);
    
    //工具栏当中也可以设置内容
    //此时工具栏当中的新建和打开  和 菜单栏文件当中的新建和打开一样
    toolBar->addAction(newAction);
    toolBar->addSeparator();//添加分割线
    toolBar->addAction(openAction);
    
    //工具栏当中添加控件
    QPushButton* btn = new QPushButton("按钮", this);
    toolBar->addWidget(btn); //QPushButton的父类就是QWidget
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    状态栏

    状态栏也只能最多有一个,派生自QWidget类,使用方法与QWidget类似,QStatusBar类常用成员函数

    //添加小部件
    void addWidget(QWidget * widget, int stretch = 0)
    //插入小部件
    int	insertWidget(int index, QWidget * widget, int stretch = 0)
    //删除小部件
    void removeWidget(QWidget * widget)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    //状态栏 => 最多只有一个
    QStatusBar* stBar = statusBar();
    setStatusBar(stBar);//将状态栏设置到窗口当中
    
    //往状态栏放入标签控件
    QLabel* left_label = new QLabel("左侧提示信息", this);
    stBar->addWidget(left_label); //默认放在左边
    
    QLabel* right_label = new QLabel("右侧提示信息", this);
    stBar->addPermanentWidget(right_label); //将信息放在右侧
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    铆接部件

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

    //铆接部件(浮动窗口) =>可以有多个
    QDockWidget* dockWidget = new QDockWidget("浮动窗口", this);
    addDockWidget(Qt::BottomDockWidgetArea, dockWidget);//停靠在底部 第一个参数:默认停靠区域 第二个参数:浮动窗口指针
    
    // 设置后续可以停靠区域,只允许上下
    dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    核心部件(中心部件)

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

    //设置中心部件 => 只能有一个
    QTextEdit* edit = new QTextEdit(this);
    setCentralWidget(edit);//将中心部件放入到窗口当中
    
    • 1
    • 2
    • 3

    上述代码最后形成的效果:

    image-20231004102314235


    资源文件

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

    • 如果你将资源以资源文件形式存储,它是会编译到可执行文件内部

    QtCreator导入资源文件

    1.1 将图片文件 拷贝到项目位置下

    1.2 右键项目->添加新文件 –> Qt - > Qt recourse File - >给资源文件起名

    1.3 假设起名为res ,会生成 res.qrc 文件

    1.4 open in editor 编辑资源

    1.5 添加前缀 添加文件

    1.6 使用 “ : + 前缀名 + 文件名 ”

    image-20231003205923392

    最好给资源文件起别名。否则如果以后我们要更改文件名,比如将 docuemnt-open.png 改成 docopen.png,那么,所有使用了这个名字的路径都需要修改。给这个文件去一个“别名”,以后就以这个别名来引用这个文件


    VS导入资源文件

    1.将所有图片放到各自文件夹下,并将文件夹拷贝到项目的同级目录下,如下:

    image-20231004103819602

    2.新建VS项目的时候,系统会自动建好一个与项目本身同名的“*.qrc文件”

    • 直接双击打开,利用Add Prefix :添加前缀,然后用Add Files:添加资源文件
    • 在开发大型项目时候,需要为不同系列的资源添加不同的前缀来加以区分。
      • 比如文件类资源可以添上前缀“\File”,编辑类资源可以添上前缀“\Edit”,设置完毕后点击左上角保存按钮即可

    image-20231004103934192

    注意:添加完资源文件,一定要记得保存,不然添加的资源文件无效


    使用资源文件

    引用格式: : / 前缀名 / 文件名 ( 别名 ) :/前缀名/文件名(别名) :/前缀名/文件名(别名)

    image-20231004105912871


  • 相关阅读:
    Android Studio Chipmunk 发布啦,快来看看有什么更新
    Macos安装redis及redis可视化管理工具
    Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切(ROI)功能(C#)
    jquery实现下拉框
    你了解供应链云仓系统源码里的5个核心功能吗?
    一、Git介绍、以及原理
    多线程应用——单例模式
    Google Earth Engine ——neighborhoodToBands函数的使用
    什么是MySQL的回表?
    librtmp源码详解
  • 原文地址:https://blog.csdn.net/chuxinchangcun/article/details/133740913