<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);
}
相关推荐
无敌最俊朗@13 分钟前
C++ 序列容器深度解析:vector、deque 与 list
开发语言·数据结构·数据库·c++·qt·list
Da Da 泓14 分钟前
LinkedList模拟实现
java·开发语言·数据结构·学习·算法
Humbunklung1 小时前
VC++ 使用OpenSSL创建RSA密钥PEM文件
开发语言·c++·openssl
Humbunklung1 小时前
填坑:VC++ 采用OpenSSL 3.0接口方式生成RSA密钥
开发语言·c++·rsa·openssl 3.0
Larry_Yanan1 小时前
QML学习笔记(十五)QML的信号处理器(MouseArea)
c++·笔记·qt·学习·ui
zl21878654482 小时前
Playwright同步、异步、并行、串行执行效率比较
开发语言·python·测试工具
Larry_Yanan3 小时前
QML学习笔记(十七)QML的属性变更信号
javascript·c++·笔记·qt·学习·ui
Tony Bai3 小时前
【Go开发者的数据库设计之道】05 落地篇:Go 语言四种数据访问方案深度对比
开发语言·数据库·后端·golang
gopyer3 小时前
180课时吃透Go语言游戏后端开发3:Go语言中其他常用的数据类型
开发语言·游戏·golang·游戏后端开发
come112343 小时前
Go vs. PHP:核心优势劣势对比
开发语言·golang·php