<4>, Qt窗口

目录

一,菜单栏

二,工具栏

三,状态栏

四,浮动窗口

五,对话框


一,菜单栏

复制代码
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 创建菜单栏
    QMenuBar* menuBar = new QMenuBar(this);
    this->setMenuBar(menuBar);

    // 创建菜单
    QMenu* menu1 = new QMenu("文件(&F)");
    QMenu* menu2 = new QMenu("编辑(&E)");
    QMenu* menu3 = new QMenu("视图(&V)");
    menuBar->addMenu(menu1);
    menuBar->addMenu(menu2);
    menuBar->addMenu(menu3);
    
    // 子菜单
    QMenu* menuParent = new QMenu("父菜单");
    QMenu* menuChild = new QMenu("子菜单");
    menuBar->addMenu(menuParent);
    menuParent->addMenu(menuChild);
    
    // 分割线
    menuBar->addSeparator();

    // 创建菜单项
    QAction* action1 = new QAction("新建");
    QAction* action2 = new QAction("打开");
    QAction* action3 = new QAction("保存");
    QAction* action4 = new QAction("另存为");
    QAction* action5 = new QAction("退出");
    menu1->addAction(action1);
    menu1->addAction(action2);
    menu1->addAction(action3);
    menu1->addAction(action4);
    menu1->addAction(action5);

    // 给action添加信号
    connect(action1,&QAction::triggered,this,&MainWindow::handle1);
    connect(action2,&QAction::triggered,this,&MainWindow::handle2);
    connect(action3,&QAction::triggered,this,&MainWindow::handle3);
    connect(action4,&QAction::triggered,this,&MainWindow::handle4);
    connect(action5,&QAction::triggered,this,&MainWindow::close);
}

二,工具栏

复制代码
    // 菜单项放到工具栏
    QToolBar* toolbar1 = new QToolBar();
    QToolBar* toolbar2 = new QToolBar();
    toolBar->addAction(action1);
    toolBar->addAction(action2);

    // 只能放左侧或者右侧
    toolbar2->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
    // 不能浮动
    toolbar2->setFloatable(false);
    // 不能移动
    toolbar2->setMovable(false);

三,状态栏

复制代码
    // 创建状态栏
    QStatusBar* statusBar = this->statusBar();
    this->setStatusBar(statusBar);

    // 显示临时消息
    //statusBar->showMessage("这是一个状态消息", 3000);

    // 给状态栏中添加子控件
    QLabel* label = new QLabel("这是一个QLabel");
    statusBar->addWidget(label);

    // 给状态栏添加进度条
    QProgressBar* progressBar = new QProgressBar();
    progressBar->setRange(0,100);
    progressBar->setValue(50);
    statusBar->addWidget(progressBar);

    // 给状态栏设置按钮
    QPushButton* button = new QPushButton("按钮");
    statusBar->addPermanentWidget(button);

四,浮动窗口

复制代码
    // 给主窗口加子窗口
    QDockWidget* dockWidget = new QDockWidget();
    this->addDockWidget(Qt::LeftDockWidgetArea,dockWidget);

    // 浮动窗口也可以设置标题
    dockWidget->setWindowTitle("这是浮动窗口");

    // 给浮动窗口内部添加控件
    QWidget* container = new QWidget();
    dockWidget->setWidget(container);

    // 创建布局管理器,把布局管理器设置到QWidget中
    QVBoxLayout* layout = new QVBoxLayout;
    container->setLayout(layout);

    // 创建其他控件添加到layout中
    QLabel* label2 = new QLabel("这是个按钮");
    QPushButton* buttuon = new QPushButton("这是按钮");
    layout->addWidget(label);
    layout->addWidget(button);

    // 设置浮动窗口允许停靠的位置
    dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::TopDockWidgetArea);

五,对话框

复制代码
void QDialog::on_pushButton_clicked()
{
    QDialog* dialog = new QDialog(this);
    dialog->setWindowTitle("这是一个对话框");
    // 设置对话框的尺寸
    dialog->resize(600,600);
    // 通过 show 方法就可以显示对话框
    dialog->show();

    // delete dialog;
    // 正确做法应该是把 delete 和关闭按钮的点击信号关联起来
    // 在用户去点击关闭的时候,触发 delete
    // Qt 为了让咱们写的方便,直接给 QDialog 设置了一个属性
    // 可以通过设置属性,完成上述效果
    dialog->setAttribute(Qt::WA_DeleteOnClose);
}
相关推荐
love530love12 分钟前
命令行创建 UV 环境及本地化实战演示—— 基于《Python 多版本与开发环境治理架构设计》的最佳实践
开发语言·人工智能·windows·python·conda·uv
陪我一起学编程35 分钟前
MySQL创建普通用户并为其分配相关权限的操作步骤
开发语言·数据库·后端·mysql·oracle
麦子邪37 分钟前
C语言中奇技淫巧04-仅对指定函数启用编译优化
linux·c语言·开发语言
破刺不会编程1 小时前
linux线程概念和控制
linux·运维·服务器·开发语言·c++
henreash1 小时前
NLua和C#交互
开发语言·c#·交互
程序员编程指南1 小时前
Qt OpenGL 集成:开发 3D 图形应用
c语言·数据库·c++·qt·3d
萌新小白的逆袭2 小时前
《Maven 核心基础笔记(第一天)》
java·开发语言·spring
苦学编程的谢2 小时前
MyBatis_3
java·开发语言·后端·mybatis
go54631584653 小时前
Python点阵字生成与优化:从基础实现到高级渲染技术
开发语言·人工智能·python·深度学习·分类·数据挖掘
猫头虎3 小时前
2025年02月11日 Go生态洞察:Go 1.24 发布亮点全面剖析
开发语言·后端·python·golang·go·beego·go1.19