<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);
}
相关推荐
行者9618 分钟前
Flutter跨平台开发在OpenHarmony上的评分组件实现与优化
开发语言·flutter·harmonyos·鸿蒙
阿蒙Amon29 分钟前
C#每日面试题-Array和ArrayList的区别
java·开发语言·c#
SmartRadio1 小时前
ESP32添加修改蓝牙名称和获取蓝牙连接状态的AT命令-完整UART BLE服务功能后的完整`main.c`代码
c语言·开发语言·c++·esp32·ble
且去填词1 小时前
Go 语言的“反叛”——为什么少即是多?
开发语言·后端·面试·go
知乎的哥廷根数学学派1 小时前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习
yeziyfx2 小时前
kotlin中 ?:的用法
android·开发语言·kotlin
charlie1145141912 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式
古城小栈2 小时前
Rust 网络请求库:reqwest
开发语言·网络·rust
hqwest3 小时前
码上通QT实战12--监控页面04-绘制6个灯珠及开关
开发语言·qt·qpainter·qt事件·stackedwidget
i橡皮擦3 小时前
TheIsle恐龙岛读取游戏基址做插件(C#语言)
开发语言·游戏·c#·恐龙岛·theisle