Qt系统学习篇(6)-QMainWindow

ops/2024/10/9 1:08:21/

QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等。
在这里插入图片描述
1.1 菜单栏 最多有一个

  • QMenuBar * bar = MenuBar(); 创建菜单栏
  • setMenuBar(bar)
  • QMenu * fileMenu = bar -> addMenu("文件”) 创建菜单
  • QAction*newAction= fileMenu ->addAction(“新建”); 创建菜单项
  • fileMenu->addseparator(); 添加分割线

1.2 工具栏 可以有多个

  • QToolBar * toolbar = new QToolBar(this);*
  • addToolBar(默认停靠区域,toolbar );

1.3 状态栏 最多一个

  • QstatusBar" stBar= statusBar();.
  • 设置到窗口中 setstatusBar(stBar);
  • stBar->addwidget(label);放左侧信息
  • stBar->addPermanentWidget(label2);放右侧信息

1.4 铆接部件 - 浮动窗口 可以多个

  • QDockwidget
  • addDockwidge t( 默认停靠区域,浮动窗口指针)
  • 设置后期停靠区域

1.5 核心部件 只能一个

  • QTextEdit
  • setCentralwidget(edit);.

1、菜单栏、工具栏

mainWindow.cpp
#include "mainwindow.h"
#include <QMenuBar>
#include <QToolBar>
#include <QPushButton>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{resize(600,400);this->setFixedSize(this->size());//创建菜单栏,放到窗口里QMenuBar*bar=menuBar();setMenuBar(bar);//创建菜单QMenu *fileMenu=bar->addMenu("文件");QMenu *editMenu=bar->addMenu("编辑");//创建菜单项、分割线QAction *newAction=fileMenu->addAction("新建");fileMenu->addSeparator();fileMenu->addAction("打开");//工具栏,可以有多个QToolBar *toolBar=new QToolBar(this);addToolBar(Qt::LeftToolBarArea,toolBar);//设置停靠、浮动toolBar->setAllowedAreas( Qt::LeftToolBarArea | Qt::RightToolBarArea);toolBar->setFloatable(false);//移动 (总开关)toolBar->setMovable(false);//工具栏添加内容toolBar->addAction(newAction);QPushButton* btn=new QPushButton(this);btn->setText("btn");toolBar->addWidget(btn);
}MainWindow::~MainWindow()
{
}

实际ui效果
在这里插入图片描述

2、状态栏、铆接部件、核心部件

/******************状态栏**********************/
QStatusBar *stBar=statusBar();
setStatusBar(stBar);
QLabel* label1=new QLabel("提示信息",this);
QLabel* label2=new QLabel("右侧提示信息",this);
stBar->addWidget(label1);
stBar->addPermanentWidget(label2);
/******************铆接(浮动窗口)**************/
QDockWidget* dockWidget=new QDockWidget(this);
addDockWidget(Qt::BottomDockWidgetArea,dockWidget);
dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
// dockWidget->setFloating(true);
/******************中心部件********************/
QTextEdit* textEdit=new QTextEdit(this);
setCentralWidget(textEdit);

效果图:1、2、3分别为状态栏、铆接、核心部件
在这里插入图片描述

3、资源文件添加

  • 图片拷贝到项目位置下
  • 新建-Qt-Qt resource File ,给资源文件起名res.qrc
  • open in editor 编辑资源,再添加前缀、添加文件

4、模态和非模态对话框

模态:不可以对其他窗口进行操作,阻塞
非模态对话框: 可以对其他窗口进行操作

mainWidget.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QDialog>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);connect(ui->actionnew,&QAction::triggered,[=](){QDialog dialog1(this);dialog1.exec();qDebug()<<"模态对话框弹出了";
//       QDialog dialog2(this);QDialog*dialog2=new QDialog(this);//在堆上创建,防止一闪而过dialog2->show();dialog2->setAttribute(Qt::WA_DeleteOnClose);//关闭时就释放qDebug()<<"非模态对话框弹出了";});
}MainWindow::~MainWindow()
{delete ui;
}

5、 QMessageBox对话框

MessageBox的5个参数

QMessageBox::information(NULL,"information","是否退出系统",QMessageBox::No|QMessageBox::Yes,QMessageBox::No);

第一个参数:是父控件指针
第二个参数:标题名称
第三个参数:信息提示框内容
第四个参数:信息提示框里面有多少个按钮,一般情况下默认为OK
第五个参数:指定按下Enter键时使用的按钮

(1)、QMessageBox 5种用法

information 消息
critical 错误
warning 警告
question 提问
about 默认消息

在这里插入图片描述

QMessageBox::information(NULL,"information","是否退出系统",QMessageBox::No|QMessageBox::Yes,QMessageBox::No);
QMessageBox::critical(NULL,"critical","出错",QMessageBox::No|QMessageBox::Yes,QMessageBox::No);
QMessageBox::warning(NULL,"warning","警告,删除文件有危害",QMessageBox::No|QMessageBox::Yes,QMessageBox::No);
QMessageBox::question(NULL,"question","您的年龄是?",QMessageBox::No|QMessageBox::Yes,QMessageBox::No);
QMessageBox::about(NULL,"about","默认消息提示框");  //默认用法

(2)、判断QMessageBox 消息框里用户选择了哪个按钮:

void Widget::on_pushButton_iconChose_clicked()
{QMessageBox messageBox(QMessageBox::NoIcon,"登录","是否登录系统",QMessageBox::No|QMessageBox::Yes,NULL);int iResult=messageBox.exec();switch (iResult) {case QMessageBox::No:QMessageBox::about(NULL,"提示","你选择了no按钮");break;case QMessageBox::Yes:QMessageBox::about(NULL,"提示","你选择了yes按钮");default:break;}
}

在这里插入图片描述

(3)、 其他对话框

文件对话框

参数1 父亲 参数2 标题 参数3默认打开路径 参数4 过滤文件格式 返回值 选取文件的路径

QString str=QFileDialog::getOpenFileName(this,"打开文件","C:\\Users\\Admin\\Pictures\\Saved Pictures","(*.jpg)");

字体对话框

bool flag;
QFont font =QFontDialog::getFont(&flag,QFont("华文彩云",36));
qDebug()<<"字体"<<font.family().toUtf8().data()<<"字号"<<font.pointSize()<<"是否加粗"<<font.bold()<<"是否倾斜"<<font.italic();

http://www.ppmy.cn/ops/122903.html

相关文章

pnpm install的时候失败提示python问题

忘记是哪个依赖了&#xff0c;npm正常&#xff0c;pnpm的时候就异常&#xff0c;但是报错里python异常 解决方法&#xff1a;安装python就行 ennn免安装的python好麻烦 网上找教程安装python好麻烦&#xff0c;发现微软可以直接安装&#xff0c;就用微软的安装了 查看结果 p…

【stm32】寄存器(stm32技术手册下载链接)

1、资料下载 RM0008_STM32F101xx,STM32F102xx,STM32F103xx,STM32F105xx和STM32F107xx单片机参考手册 | STMCU中文官网 2、代码 设置PB7 //设置PB7 #define SDA_IN() {GPIOB->CRL&0X0FFFFFFF;GPIOB->CRL|(u32)8<<28;} #define SDA_OUT() {GPIOB->…

专栏十九:单细胞大数据时代使用scvi和scanpy整合数据

慢更ing,主要是记录自己在分析中的一些困惑 一、基础知识和解惑 放在最前面,是因为scvi整合不像harmony,傻瓜式操作,很多地方还是要注意一下的。 1.如何正确的寻找HVGs 一般我们使用的函数就是scanpy.pp.highly_variable_genes,里面的参数较为复杂。 Expects logarit…

通信工程学习:什么是ICP网络内容服务商

ICP&#xff1a;网络内容服务商 ICP&#xff0c;全称Internet Content Provider&#xff0c;即网络内容服务商&#xff0c;是指那些通过互联网向用户提供各种类型内容服务的组织或个人。ICP在数字化时代扮演着至关重要的角色&#xff0c;它们不仅是信息的传播者&#xff0c;更是…

登录注册静态网页实现(HTML,CSS)

实现效果图 实现效果 使用HTML编写页面结构&#xff0c;CSS美化界面&#xff0c;点击注册&#xff0c;跳转到注册界面&#xff0c;均为静态网页&#xff0c;是课上的一个小作业~ 使用正则表达式对输入进行验证&#xff0c;包括邮箱格式验证&#xff0c;用户名格式验证。 正则…

2024年中国研究生数学建模什么时候出成绩(附避坑指南)

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 今年的华为杯已经于2024年9月20日——2024年9月25日完成&#xff0c;相信大家下…

OpenGL笔记之事件驱动设计将相机控制类和应用程序类分离

OpenGL笔记之事件驱动设计将相机控制类和应用程序类分离 —— 2024-10-02 下午 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记之事件驱动设计将相机控制类和应用程序类分离1.代码图片2.分析3.UML4.代码 1.代码图片 运行 Mouse button 1 pressed at (1…

如何高效使用Prompt与AI大模型对话

一、如何与人工智能对话 在人工智能的世界里&#xff0c;提示词&#xff08;Prompt&#xff09;就像是一把钥匙&#xff0c;能够解锁AI智能助手的潜力&#xff0c;帮助你更高效地获取信息、解决问题。但如何正确使用这把钥匙&#xff0c;却是一门艺术。本文将带你了解提示词的…