• 主应用窗口


    主窗口为建立一个程序用户界面提供一个框架,Qt中提供QMainWindow和其他的一些相关的类共同完成主窗口的管理。

    QMainWindow含有以下组件:

    • 菜单栏(QMenuBar):包含一个下拉菜单项的列表,菜单栏列表由QAction类实现,   (只能有一个菜单栏)
    • 工具栏(QToolBar):用于显示一些常用的菜单项目,可以插入其他部件,可以移动     (可以有多个工具栏)
    • 中心部件(Central Widget):在中心区域放入一个窗口部件作为中心部件。                 (只能有一个中心部件)
    • Dock部件(QDack Widget):停靠窗口,可以停靠在四周(可以有多个)
    • 状态栏(QStatusBar):显示一些状态信息,在窗口的最底部(只能有一个)

    以下根据Window11中的记事本来详细介绍 。

    菜单栏(QMenuBar):

    构造函数:

     常见的函数:

    setMenuBar()在主窗中设置菜单栏
    addMenu()在菜单栏中添加菜单
    addAction()在菜单栏中添加菜单项
    addSeparator()添加分隔符
    clear()清除菜单中的所有操作
    insertMenu()插入菜单
    setTitle()设置菜单标题
    addEnabled()动作按钮设置启动和禁用
    setCornerWidget()在最最左侧或最右侧添加一个控件

    setCornerWidget()的参数:

    Qt::TopRightCorner在最右边
    Qt::TopLeftCorner在最左边

     addMenu的种类:

    addMenu(QMenu*menu)将菜单添加到菜单栏,返回菜单的menuAction(),菜单栏不拥有菜单的所有权
    addMenu(const QString &title)将带有标题的新QMEnu附加到菜单栏,菜单栏拥有菜单的所有权,并返回新菜单

    记事本菜单栏的实现:(为了方便就不创建成员函数了)

    创建一个mainWindow的项目。

    在mainWindow的构造函数中添加

    1. resize(1200,800);
    2. setWindowTitle("记事本");
    3. QMenuBar *menubar=new QMenuBar(nullptr);
    4. setMenuBar(menubar);//在窗口中设置菜单栏
    5. //创建菜单
    6. QMenu *menu1=new QMenu("文件");
    7. QMenu *menu2=new QMenu("编辑");
    8. QMenu *menu3=new QMenu("查看");
    9. //添加菜单
    10. menubar->addMenu(menu1);
    11. menubar->addMenu(menu2);
    12. menubar->addMenu(menu3);
    13. //创建文件的菜单项
    14. QAction *act1_1=new QAction("新建(ctrl+N)");
    15. QAction *act1_2=new QAction("新建窗口(ctrl+Shift+N)");
    16. QAction *act1_3=new QAction("打开(ctrl+O)");
    17. QAction *act1_4=new QAction("保存(ctrl+S)");
    18. QAction *act1_5=new QAction("另存为(ctrl+Shift+S)");
    19. QAction *act1_6=new QAction("页面设置");
    20. QAction *act1_7=new QAction("打印(ctrl+P)");
    21. QAction *act1_8=new QAction("退出");
    22. QList<QAction*> listaction1;//创建一个容器,存放QACtion
    23. listaction1<<act1_1<<act1_2<<act1_3<<act1_4<<act1_5<<act1_6<<act1_7<<act1_8;
    24. //添加文件的菜单项
    25. menu1->addActions(listaction1);
    26. //创建编辑的菜单项
    27. QAction *act2_1=new QAction("撤销(ctrl+Z)");
    28. QAction *act2_2=new QAction("剪切(ctrl+Shift+N)");
    29. QAction *act2_3=new QAction("复制(ctrl+O)");
    30. QAction *act2_4=new QAction("粘贴(ctrl+S)");
    31. QAction *act2_5=new QAction("删除(ctrl+Shift+S)");
    32. QAction *act2_6=new QAction("查找");
    33. QAction *act2_7=new QAction("替换(ctrl+P)");
    34. QAction *act2_8=new QAction("转到");
    35. QAction *act2_9=new QAction("全选");
    36. QAction *act2_10=new QAction("时间和日期");
    37. QAction *act2_11=new QAction("字体");
    38. QList<QAction*> listaction2;//创建一个容器,存放QACtion
    39. listaction2<<act2_1<<act2_2<<act2_3<<act2_4<<act2_5<<act2_6<<act2_7<<act2_8
    40. <<act2_9<<act2_10<<act2_11;
    41. //添加编辑的菜单项
    42. menu2->addActions(listaction2);
    43. //创建查看的菜单项
    44. QAction *act3_1=new QAction("缩放");
    45. QAction *act3_2=new QAction("状态栏");
    46. QAction *act3_3=new QAction("自动换行");
    47. QList<QAction*> listaction3;//创建一个容器,存放QACtion
    48. listaction3<<act3_1<<act3_2<<act3_3;
    49. //添加查看的菜单项
    50. menu3->addActions(listaction3);
    51. //在最右边添加一个控件
    52. QPushButton *push=new QPushButton("设置");
    53. menubar->setCornerWidget(push,Qt::TopRightCorner);//把控件放到最右边

    效果展示:

     工具栏(QToolBar)

    构造函数:

     常用的函数:

    addToolBar(Qt::ToolBarArea,toolbar)添加工具栏,并设置初始位置
    addAction()添加工具项
    addSeparator()添加分隔符
    clear()清除工具栏所有操作
    insertSeparator(QAction)插入分隔符
    insertWidget()添加小部件
    setAllowedArea()设置允许停靠位置
    allowedArea()获取可停靠位置
    setFloatable(bool)设置是否浮动
    setMovable(bool) 设置是否能移动

     Qt::ToolBarArea(停放位置)

    Qt::LeftToolBarArea放在左边
    Qt::RightToolBarArea放在右边
    Qt::TopToolBarArea放在顶部
    Qt::BottonToolBarArea放在底部
    Qt::AllToolBarArea放在全部位置
    Qt::NoToolBarArea不放在任何位置

    在项目中添加工具栏:

    1. //添加工具栏
    2. QToolBar *toolbar=new QToolBar(this);
    3. addToolBar(Qt::TopToolBarArea,toolbar);//设置工具栏位置
    4. toolbar->setAllowedAreas(Qt::AllToolBarAreas);//可以停靠在所有位置
    5. toolbar->addAction("退出");//添加行为
    6. toolbar->addSeparator();//添加分隔符
    7. toolbar->addAction("返回");//添加行为

    效果展示:

    顶部

    左侧 

     右侧

     底部

     中心部件(Central Widget

    主窗口的中心区域添加控件:addCentralWidget()

    1. //中心部件(Central Widget)
    2. QTextEdit *text1=new QTextEdit(this);//创建以一个文本框
    3. setCentralWidget(text1);//在中心部件中添加控件

    QMdiSubWindow 类

    QMdiSubWindow 表示QMdiArea中的顶级窗口,由带有窗口装饰的标题栏、内部小组件以及窗口框架和大小夹点(取决于当前样式)组成。QMdiSubWindow 有自己的布局,该布局由标题栏和内部小部件的中心区域组成。

    构造函数: 

     常见的函数:

    addWidget()添加控件
    1. //点击新建窗口,生成窗口
    2. connect(act1_2,&QAction::triggered,[=]()
    3. {
    4. QMdiSubWindow *md=new QMdiSubWindow;
    5. md->setWidget(text1);//设置一个文本输入框
    6. md->setWindowTitle("文本子窗口");
    7. md->show();//显示
    8. });

    QDockWidget(浮动窗口)

    QDockWidget 提供了停靠小部件的概念,也称为工具选项板或实用程序窗口。停靠窗口是放在QMainWindow中的中央小部件周围的停靠小部件区域中的辅助窗口。

    头文件:QDockWidget

    构造函数:

     常用函数:

    addDockWidget()在主窗口中添加DockWidget
    setAllowedArea()设置可停靠位置
    setFeatures()设置可移动,可关闭,可浮动
    setFloating()设置是否可浮动
    setWidget()设置控件

    setFeatures(QDockWidget::DockWidgetFeatures features)

    可以一起使用多个用 | 连接

    QDockWidget::NoDockWidgetFeatures无法关闭、移动或浮动停靠微件
    QDockWidget::DockWidgetFloatable停靠窗口小部件可以与主窗口分离,并作为独立窗口浮动。
    QDockWidget::DockWidgetMovable用户可在停靠点之间移动停靠小部件。
    QDockWidget::DockWidgetClosable可以关闭停靠小部件

    setAllowedAreas(Qt::DockWidgetAreas areas

    Qt::LeftDockWidgetArea左边
    Qt::RightDockWidgetArea右边
    Qt::TopDockWidgetArea
    Qt::BottomDockWidgetArea
    Qt::AllDockWidgetAreas全部位置
    Qt::NoDockWidgetArea自可停靠在插入处

     把代码添加到项目中:

    1. //创建浮动窗口
    2. QDockWidget *dw=new QDockWidget;
    3. addDockWidget(Qt::RightDockWidgetArea,dw);//把该控件放到最右边
    4. dw->setWindowTitle("停靠窗口");//设置窗口标题
    5. dw->setAllowedAreas(Qt::AllDockWidgetAreas);//可以停靠在任意方向
    6. dw->setFeatures(QDockWidget::DockWidgetMovable|QDockWidget::DockWidgetClosable);// 可移动 可关闭

     可以停靠在四个方向

    QStatusBar(状态栏)

    头文件:#include

    构造函数:

    由于mainWidget中包含QStatusBar,所以不用创建 

    常用的函数:

    addWidget()添加控件(可以被临时消息遮挡)
    addPermanentWidget()将控件永久添加到状态栏(位于最右侧)
    showMessage()设置临时信息,可以设置持续时间
    currentMessage()获取临时信息
    insertPermanentWidget()插入永久控件到状态栏
    insertWidget()插入控件到状态栏
    setSizeGripEnabled(false)去掉右下角的三角

    在项目中添加以下代码:

    1. //状态栏
    2. QLabel *lab1=new QLabel("UTf-8");
    3. QLabel *lab2=new QLabel("Windows(CRLF)");
    4. QLabel *lab3=new QLabel("行数和列数");
    5. QLabel *lab4=new QLabel("100%");
    6. lab1->setFixedSize(100,30);
    7. lab2->setFixedSize(200,30);
    8. lab3->setFixedSize(200,30);
    9. lab4->setFixedSize(200,30);
    10. ui->statusbar->setSizeGripEnabled(false);//去掉右下角的三角
    11. ui->statusbar->addPermanentWidget(lab1);
    12. ui->statusbar->insertPermanentWidget(0,lab2);
    13. ui->statusbar->addWidget(lab3);
    14. ui->statusbar->addWidget(lab4);

     效果为:

     临时消息的使用:

    ui->statusbar->showMessage("111111111111111111111",2000);//持续2000毫秒
     
    

     

     到这里就实现了记事本的页面

     

  • 相关阅读:
    递归练习题
    C专家编程 第4章 令人震惊的事实:数组和指针并不相同 4.3 什么是声明,什么是定义
    C++ 基础知识 ∈ C++ 编程笔记
    【附源码】计算机毕业设计SSM视频网站
    什么是tomcat?tomcat是干什么用的?
    学习 go-admin 框架(1)
    Java学习笔记5.4.2 Map接口 - TreeMap类
    基于Python+djangoWeb的校园信息化统计平台
    allure结合python生成测试报告教程
    《深度探索C++对象模型》阅读笔记 第六章 执行期语意学
  • 原文地址:https://blog.csdn.net/qq_45303986/article/details/127769531