当前位置: 首页 > java >正文

Qt窗口:QToolBar、QStatusBar、QDockWidget、QDialog

目录

认识工具栏

状态栏

子窗口

对话框


认识工具栏

工具栏不同于菜单栏,工具栏可以有多个,也可以没有。

工具栏往往是一些常用的菜单项的快捷方式。

工具栏可以是文本形式表示,然而更多的设计方式是用图标表示,图标会覆盖文本,但不是完全覆盖,因为当鼠标悬浮在图标上时,文本以toolTip的方式显示。

    QToolBar* toolBar = new QToolBar();this->addToolBar(toolBar);QAction* action = new QAction("保存");toolBar->addAction(action);

 

  • 工具栏往往搭配菜单栏使用

 

    //创建菜单栏QMenuBar* menuBar = this->menuBar();this->setMenuBar(menuBar);//添加一个菜单QMenu* menu = new QMenu("文件");menuBar->addMenu(menu);//QToolBar* toolBar = new QToolBar();this->addToolBar(toolBar);//菜单项添加到工具栏QAction* action = new QAction("保存");toolBar->addAction(action);//菜单项添加到菜单menu->addAction(action);

 

  • 工具栏的浮动

仔细观察工具栏,前面有三个点,说明工具栏是可以拖动的,如果使用过VS,对VS中工具栏的上下左右拖动就会很熟悉。

Qt可以在代码中设置浮动的属性,比如默认停靠在左边还是右边,可以在哪些地方停靠,可以设置它是否允许浮动。

 

 

//默认在左边    
QToolBar* toolBar = new QToolBar();
this->addToolBar(Qt::LeftToolBarArea,toolBar);

 

//设置允许在哪些地方停靠
toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);

 

//设置不允许浮动,即只能在左或者右,不可以浮动在任意位置了
toolBar->setFloatable(false);

 

//设置不允许移动,只能停靠在默认位置
toolBar->setMovable(false);

 

状态栏

状态栏和菜单栏,默认情况下Qt Creator会自动生成,所以不用再单独new。

  • 显示临时文本

 

//临时显示文本
statusBar->showMessage("一段文本",3000);

 

    QStatusBar* statusBar = ui->statusbar;this->setStatusBar(statusBar);//临时显示文本//statusBar->showMessage("一段文本",3000);//给状态栏添加子控件QLabel* label = new QLabel("这是一个Label");statusBar->addWidget(label,1);//第二个参数是拉伸系数//添加一个进度条QProgressBar* prB = new QProgressBar();prB->setRange(1,200);prB->setValue(130);statusBar->addWidget(prB,2);//添加一个按钮,从右边添加QPushButton* but = new QPushButton("按钮");statusBar->addPermanentWidget(but);

 

子窗口

子窗口,又称浮动窗口,Qt用QDockWidget类来表示子窗口。

 

//给主窗口添加一个子窗口QDockWidget* dock = new QDockWidget();this->addDockWidget(Qt::LeftDockWidgetArea,dock);//设置标题dock->setWindowTitle("一个子窗口");//给子窗口中添加控件//注意,子窗口只能有一个QWidget控件,然后向QWidget中添加多个控件。QWidget* widget = new QWidget();dock->setWidget(widget);//添加布局管理器QVBoxLayout* layout = new QVBoxLayout();widget->setLayout(layout);QLabel* label = new QLabel("标签");QPushButton* but = new QPushButton("按钮");layout->addWidget(label);layout->addWidget(but);//设置子窗口的停靠属性dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);

对话框

Qt用QDialog表示对话框。

Qt内置了很多对话框。

可以在创建项目的时候,将主窗口选择为对话框,但是实际开发中,往往是创建一个类,让这个类继承QDialog。

QDialog可以同时存在很多个,因此可能出现内存泄露的问题,而对话框的释放往往难以把握位置,于是把对话框的关闭信号和释放关联在一起,Qt提供了这样的便捷设置。

 

dialog->setAttribute(Qt::WA_DeleteOnClose);
  • 自定义一个对话框

首先创建一个MainWindow项目。

 

 

给项目里面添加一个新的类。

 

 

 新建一个按钮

 

 

这是它的槽函数

 

void MainWindow::on_pushButton_clicked()
{Dialog* dialog = new Dialog();dialog->resize(400,300);dialog->setAttribute(Qt::WA_DeleteOnClose);dialog->show();
}

 

 Dialog的构造函数如下,自定义的对话框里面有按钮、标签。

 

#include <QVBoxLayout>
#include <QPushButton>
#include <QLabel>
Dialog::Dialog()
{QVBoxLayout* layout = new QVBoxLayout();this->setLayout(layout);QPushButton* but = new QPushButton("这是一个按钮");QLabel* label = new QLabel("这是一个标签");layout->addWidget(but);layout->addWidget(label);}

 

最终效果。 

 

 

  • 模态和非模态

对话框弹出来以后,必须处理完对话框,才能处理父窗口的现象称为模态,反之为非模态。

设置模态的代码很简单,在展示对话框的时候,将show函数换成exec函数即可。

  •  Qt提供了很多标准对话框,继承自QDialog

  • 消息对话框QMessageBox 

这些内置的对话框基本都有相应的静态函数,可以不用创建对象,直接调用来弹出对话框。

http://www.xdnf.cn/news/15281.html

相关文章:

  • vue3 ref vs reactive值的修改
  • es里为什么node和shard不是一对一的关系
  • Git 使用笔记
  • 使用Starrocks替换Clickhouse的理由
  • SPSSPRO:数据分析市场SaaS挑战者的战略分析
  • 香港服务器Python自动化巡检脚本开发与邮件告警集成
  • 【Linux】线程机制深度实践:创建、等待、互斥与同步
  • 网络协议学习思维导图
  • python爬取新浪财经网站上行业板块股票信息的代码
  • java进阶(二)+学习笔记
  • 【算法】递归、搜索与回溯
  • Datawhale AI 夏令营2025科大讯飞AI大赛<夏令营:用AI做带货视频评论分析>
  • [Nagios Core] CGI接口 | 状态数据管理.dat | 性能优化
  • jenkins部署前端vue项目使用Docker+Jenkinsfile方式
  • 【星闪】Hi2821 | SDK开发入门,应用启动流程,创建自己的应用
  • 大模型聊天模板
  • 在人工智能自动化编程时代:AI驱动开发和传统软件开发的分析对比
  • AI 助力:如何批量提取 Word 表格字段并导出至 Excel
  • Infoblox NetMRI 远程命令执行漏洞复现(CVE-2025-32813)
  • C++值类别与移动语义
  • GraphRAG Docker化部署,接入本地Ollama完整技术指南:从零基础到生产部署的系统性知识体系
  • 动物世界一语乾坤韵芳华 人工智能应用大学毕业论文 -仙界AI——仙盟创梦IDE
  • 板凳-------Mysql cookbook学习 (十一--------9)
  • Typecho分类导航栏开发指南:从基础到高级实现
  • axios拦截器
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频摘要快速生成与检索优化(345)
  • Oracle SQL - 使用行转列PIVOT减少表重复扫描(实例)
  • 前端-CSS-day3
  • 【FreeRTOS】事件组
  • 决策树学习