qt5---QMainWindow

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

 

复制代码
#include "win.h"
#include <QMenuBar>
#include <QToolBar>
#include <QLabel>
#include <QStatusBar>
#include <QDockWidget>
#include <QTextEdit>

Win::Win(QWidget *parent)
    : QMainWindow(parent)
{
    this->resize(500,400);
    //******************菜单栏操作**************************
    QMenuBar* bar=menuBar(); //返回菜单栏指针
    this->setMenuBar(bar);//给窗口设置菜单栏--把菜单栏放入窗口
    //需要  #include <QMenuBar>
    QMenu* fileMenu=bar->addMenu("文件");//给菜单栏添加菜单
    //返回菜单的指针
    QMenu* editMenu=bar->addMenu("编辑");
    QAction* newAction=fileMenu->addAction("新建"); //给菜单添加一个菜单项目--添加一个行为
    //返回行为指针
    fileMenu->addSeparator();  //给菜单添加分割线
    QAction* openAction=fileMenu->addAction("打开");
    newAction->setIcon(QIcon("D:\\ss\\大象.png"));  //给行为增加图标--文件中
    openAction->setIcon(QIcon(":/tupin/img/对勾.png"));//给行为增加图标--资源文件中
    //使用资源文件格式:":+前缀名+文件名"


    //******************工具栏操作*************************
    QToolBar* toolbar=new QToolBar(this);  //创建一个工具栏
    //需要  #include <QToolBar>
    addToolBar(Qt::LeftToolBarArea,toolbar);//给窗口添加工具栏--把工具栏放到窗口
    //主窗口的工具栏上可以有多个工具条
    //工具条是一个可移动的窗口
    //参数2  要添加的工具栏
    //参数1[可选] 初始停靠区域,包括:
    //Qt::LeftToolBarArea 停靠在左侧        Qt::RightToolBarArea 停靠在右侧
    //Qt::TopToolBarArea 停靠在顶部--默认         Qt::BottomToolBarArea    停靠在底部
    //Qt::AllToolBarAreas   以上四个位置都可停靠
    toolbar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);//只能左右停靠
    toolbar->setFloatable(false);//能否浮动
    toolbar->setMovable(false);//能否移动--能否拖拽
    toolbar->addAction(newAction); //给工具栏添加行为
    //Qt 并没有专门的菜单项类,只是使用一个QAction类,抽象出公共的动作。当我们把QAction对象添加到菜单,就显示成一个菜单项,添加到工具栏,就显示成一个工具按钮。用户可以通过点击菜单项、点击工具栏按钮、点击快捷键来激活这个动作
    toolbar->addSeparator();//给工具栏添加分割线
    toolbar->addAction(openAction);

    //******************状态栏操作*******************
    QStatusBar* statusbar=statusBar(); //创建状态栏
    //返回状态栏指针
    setStatusBar(statusbar);//给窗口添加状态栏--把状态栏放到窗口
    //状态栏也只能最多有一个
    QLabel* label=new QLabel("提示信息",this);
    statusbar->addWidget(label,0);//给状态栏左侧添加控件--左侧
    //需要  #include <QStatusBar>
    //方法二 QLabel* label=new QLabel("提示信息",statusbar)---父控件是状态栏
    QLabel* label1=new QLabel("提示信息1",this);
    statusbar->addPermanentWidget(label1);//给状态栏右侧添加控件

    //*****************中心部件*******************
    QTextEdit* edit=new QTextEdit;
    setCentralWidget(edit); //给窗口添加中心控件

    //*****************浮动窗口和停靠窗口******************
    QDockWidget* dock=new QDockWidget;//创建锚接窗口--浮动窗口--停靠窗口
    //需要 #include <QDockWidget>
    addDockWidget(Qt::BottomDockWidgetArea,dock); //把浮动窗口添加到窗口中
    //参数1 起始停靠位置
    //Qt::BottomDockWidgetArea   中心部件底部
    //Qt::LeftDockWidgetArea
    //Qt::RightDockWidgetArea
    //Qt::TopDockWidgetArea
    //Qt::AllDockWidgetAreas
    //Qt::NoDockWidgetArea
    dock->setAllowedAreas(Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);//只能上下停靠



}

Win::~Win()
{

}
复制代码

 

 

connect(newAction,&QAction::triggered,this,[=](){qDebug()<<"点击新建行为了";});//点击行为,运行槽函数

 

 

posted @   天子骄龙  阅读(514)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示