<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);
}
相关推荐
开发小能手-roy10 小时前
StringBuilder vs StringBuffer:2024年还需要线程安全字符串吗?
开发语言·python·安全
开发小能手-roy10 小时前
Java集合框架选型指南:从ArrayList到ConcurrentSkipListMap
java·开发语言
凡人叶枫10 小时前
Effective C++ 条款41:了解隐式接口和编译期多态
java·开发语言·c++·effective c++
2601_9547064910 小时前
云手机技术详解+Python实战调用|2026高稳云手机平台推荐
开发语言·python·智能手机
chushiyunen10 小时前
java中的路径处理、左右斜杠
java·开发语言·python
森G11 小时前
75、服务器源码解析---------云视频服务项目
linux·服务器·网络·c++·qt
重生之后端学习11 小时前
Java入门
java·开发语言·职场和发展
碧海蓝天202211 小时前
C++法则24:在标准 C++ 中,没有任何可移植的方式判断指针 T* pt 指向的内存位置是否已经 构造了对象,程序员必须手动跟踪哪些元素已构造。
java·开发语言·c++
代码不加糖11 小时前
Proxy能够监听到对象中的对象的引用吗?
开发语言·前端·javascript
charlie11451419111 小时前
现代C++指南:Lambda,让我们用另一种方式持有函数
开发语言·c++