QT-空窗口主窗口对话框

1. QMainWindow

  • QMainWindow 用来创建主窗口

  • 主窗口包含: 标题栏(Window title)、菜单栏(MenuBar)、工具栏(ToolBar)、状态栏(StatusBar)、停靠部件(DockWidgetArea)、工作空间(Central Widget)

1.1 菜单栏

  • 菜单栏需要使用的包: QMenuBar 、 QMenu

  • QMenuBar: 用来创建菜单栏

    • addMenu:将菜单项添加到菜单栏

  • QMenu: 用来创建菜单

    • addAction: 添加动作,向菜单中添加菜单项(选择菜单项才执行具体的操作

    • addSeparator: 添加分割线

  • 其他用到的方法:

    • this->setMenuBar(xxx):该方法是 QMainWindow 提供的方法,用来将菜单栏添加到窗口

包含一、二、三级菜单示的例:

#include "mymainwindow.h"#include <QMenu>
#include <QMenuBar>
#include <QAction>
#include <QDebug>
#include<QToolBar>
#include <QStatusBar>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QTextEdit>
#include <QDockWidget>
MyMainWindow::MyMainWindow(QWidget *parent): QMainWindow(parent)
{this ->setWhatsThis("主窗口测试");this->resize(500,300);1.菜单栏///1.实例化菜单栏对象并设置到窗口上QMenuBar *menubar = new QMenuBar;this->setMenuBar(menubar);//2) 创建一级菜单QMenu *fileMenu = menubar->addMenu("文件");//menubar->addMenu("文件");QMenu *editMenu = menubar->addMenu("编辑");QMenu* debugMenu = menubar->addMenu("调式");QMenu* toolMenu = menubar->addMenu("工具");//3)创建二级菜单//没有子菜单的菜单项都能点击操作,统统都叫做Action//有子菜单的菜单项,鼠标放在菜单项上时,就会自动展开子菜单,都叫做Menu//向文件菜单中添加子菜单QAction *newAction = fileMenu->addAction(QIcon(":/icons/amumu.png"),"新建");// QAction *newAction = fileMenu->addAction("新建");QAction *openAction =  fileMenu->addAction(QIcon(":/icons/ashe.png"),"打开");fileMenu->addSeparator();QAction *exitAction = fileMenu->addAction(QIcon(":/icons/jax.png"),"退出");toolMenu->addAction("locket");QMenu *outMenu = toolMenu->addMenu("外部");QMenu *quickMenu =  outMenu->addMenu("Qt Quick");quickMenu->addAction("aaa");quickMenu->addAction("bbb");QMenu *yuyanMenu =  outMenu->addMenu("Qt预言家");yuyanMenu->addAction("ccc");QMenu *wenbenMenu =  outMenu->addMenu("文本");wenbenMenu->addAction("ddd");outMenu->addSeparator();QMenu *configMenu =  outMenu->addMenu("config");configMenu->addAction("123");toolMenu->addSeparator();toolMenu->addAction("选项");editMenu->addAction("Undo");editMenu->addAction("Redo");editMenu->addSeparator();editMenu->addAction("全选");//链接action的信号和槽connect(newAction, &QAction::triggered,[](){qDebug() << "准备新建文件";});connect(openAction,&QAction::triggered,[](){qDebug() << "打开文件";});connect(exitAction,&QAction::triggered, this, &QMainWindow::close);//创建三级菜单debugMenu->addAction("脱离调试");//创建带有子菜单的菜单项QMenu *startMenu= debugMenu->addMenu(QIcon(":/icons/vn.png"),"开始调试");startMenu->addAction("start debug");startMenu->addAction("忽略");startMenu->addSeparator();startMenu->addAction("关联");}MyMainWindow::~MyMainWindow()
{}

三级菜单结构图:

  1. 创建菜单栏,并将菜单栏添加到窗口上

QMenuBar *menuBar = new QMenuBar;

this->setMenuBar(menuBar);

  1. 创建一个可以点击的菜单项时,调用 addAction

  2. 创建一个可以包含子菜单的菜单项时,调用 addMenu 方法

QMenu *level_1 = menuBar->addMenu("一级菜单");

level_1->addAction("可以点击的二级菜单");

QMenu *level_2 = level_1->addMenu("可以包含三级菜单的菜单");

level_2->addAction(..) ; level_2->addMenu(....)

1.2 为action增加信号

  • QAction 类可以保存 addAction 得到的对象

  • QAction 提供了 triggered 信号,点击时会触发

#include <QMenuBar>
#include <QMenu>
#include <QAction>// 创建菜单栏
QMenuBar *bar = new QMenuBar;
this->setMenuBar(bar);// 配置一级菜单
QMenu *fileMenu = bar->addMenu("文件");
fileMenu->addAction("新建");
fileMenu->addSeparator();
// 使用 QAction 类保存 addAction 得到的对象
QAction *exitAction = fileMenu->addAction("退出");// 配置 信号 和 槽  --->  退出功能
connect(exitAction, &QAction::triggered, this, &QWidget::close);

1.3 QIcon

QIcon 用来创建图标,图标就是图片

在项目中使用 QIcon 首先要将 QIcon 加入到项目中

1.3.1 向项目中增加资源

1.将图片保存到项目目录下

2. 以资源形式将图片添加到项目中

3.添加前缀 和 资源图片

1.3.2 在菜单中设置图标

  • QIcon("图标地址")

    • 地址格式:绝对路径 或者 资源路径

    • 资源路径以 : 开头

  • addMenu(QIcon, title);

  • addAction(QIcon, title);

  • 注意事项:如果给一级菜单设置图标,则不显示文字只显示图标

// 带图标菜单
// 一级菜单只显示图片,不显示文字
QMenu *help = bar->addMenu(QIcon(":/icon/sound0.png"), "帮助");
help->addAction(QIcon(":/icon/sound1"), "关于我们");
QMenu *help_l1 = help->addMenu(QIcon("E:/c++/QT/qt-3/exp/01_main_1/icon/search.png"), "联系我们");
help_l1->addAction(QIcon(":/icon/save.png"), "QQ");
help_l1->addAction(QIcon(":/icon/saveAs.png"), "微信");

1.4 工具栏

  • QToolBar: 工具栏类

    • this->addToolBar(xxx): 该方法是 QMainWindow 提供的方法,用来将工具栏添加到窗口中

  • 核心方法: addAction

    • 由于工具栏中的操作项基本都和菜单栏中的操作项一样(快捷方式),所以可以调用 addAction 方法将菜单栏中的对应项直接方进去

  • QToolBar 其他常用方法:

    • setAllowedAreas(位置):配置工具栏显示的位置,默认显示在上方,并且能够在上下左右移动

      • Qt::LeftToolBarArea : 显示在窗口左侧

      • Qt::RightToolBarArea : 显示在窗口左侧

      • Qt::TopToolBarArea : 显示在窗口左侧

      • Qt::BottomToolBarArea : 显示在窗口左侧

    • setFloatable(true/false): 设置工具栏是否能浮动

    • setMovable(true/false): 设置工具栏是否允许在上下左右移动

    • addSeparator(): 设置分割线

  • 按钮也能设置到工具栏中

    • toolBar->addWidget(xxx);

// 工具栏
// 创建工具栏
QToolBar *toolBar = new QToolBar;
// 将工具栏添加到主窗口
this->addToolBar(toolBar);
// 配置工具栏能够显示的位置, 默认上下左右, 此处设置为 左右
toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
// 禁止工具栏浮动
toolBar->setFloatable(false);
// 禁止工具栏移动
toolBar->setMovable(false);toolBar->addAction("新建");
toolBar->addSeparator();
toolBar->addAction(open);// 在工具栏中添加按钮
QPushButton *print = new QPushButton;
print->setText("打印");
toolBar->addWidget(print);

1.5 状态栏

  • QStatusBar:状态栏类

    • this->setStatusBar(xxx):该方法是 QMainWindow 提供的方法,用来将状态栏添加到窗口下方

    • addWidget(widget):将状态信息添加到左侧

    • addPermanentWidget(widget): 将状态信息添加到右侧

QStatusBar * stBar = new QStatusBar;
this->setStatusBar(stBar);QLabel *baseInfo = new QLabel("基础信息", this);
stBar->addWidget(baseInfo);QLabel *countInfo = new QLabel("统计信息", this);
stBar->addPermanentWidget(countInfo);

1.6 中心部件

  • setCentralWidget(): 该方法是 QMainWindow 提供的方法,用来将中心部件添加到窗口

 // 配置中心部件
QTextEdit *txt = new QTextEdit(this);
this->setCentralWidget(txt);

1.7 铆接部件

  • QDockWidget: 铆接部件类

    • this->addDockWidget: QWidget 提供的方法,将铆接部件添加到窗口

    • setAllowedAreas: 设置铆接部件能够停靠的位置

// 配置铆接部件
QDockWidget * dw = new QDockWidget("标题", this);
this->addDockWidget(Qt::LeftDockWidgetArea, dw);
dw->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);

2. ui 方式操作 MainWindow

2.1 创建项目

创建项目时勾选 "创建界面"

 增加了 .ui 文件,内部是 xml 文档形式描述UI结构选择 "设计" 时,显示UI结构,可以使用 拖拽方式来设计UI.pro 文件增加了 .ui 文件的配置

2.2 菜单栏

1.创建菜单栏

注意事项:

  • 添加菜单时,建议先写英文,再改为中文。 使用英文方便创建对应的对象

    • 文件 ---> menufile

    • 编辑 ---> menuedit

    • 查看 ---> menuview

    • help ---> 帮助

2.增加二级菜单 

将二级菜单修改为中文显示

3.增加三级菜单 

2.3 工具栏

  • 在一个窗口中可以有多个工具栏

  • 可以将 actionXxx 直接拖拽到工具栏

2.4 状态栏&铆接

状态栏和铆接部件只能手写

2.5 中心部件

将部件拖拽到中心区域即可

3. 其他对话框

3.1 QMessageBox

QMessageBox 是一种消息对话框,能够对用户的操作进行提示。

静态方法:

  • 基础提示: QMessageBox::about(参数1, 参数2, 参数3)

  • 信息提示:QMessageBox::information(参数1, 参数2, 参数3, 参数4, 参数5)

  • 警告提示:QMessageBox::warning(参数1, 参数2, 参数3, 参数4, 参数5)

  • 错误提示:QMessageBox::critical(参数1, 参数2, 参数3, 参数4, 参数5)

  • 询问提示:QMessageBox::question(参数1, 参数2, 参数3, 参数4, 参数5)

    • 参数1: 父控件

    • 参数2: 标题栏提示信息

    • 参数3: 主提示信息

    • 参数4: 按钮设置 (注意:每一种messagebox都有默认的按钮;如果默认的按钮不够用或者不合适可以进行修改)

    • 参数5: 默认选中按钮

// 关于
connect(ui->aboutBtn, &QPushButton::clicked, [=](){QMessageBox::about(this, "关于", "关于提示信息");
});// 消息提示框
connect(ui->infoBtn, &QPushButton::clicked, [=](){QMessageBox::information(this, "提示", "这是一个提示信息");
});// 警告提示框
connect(ui->warnBtn, &QPushButton::clicked, [=](){QMessageBox::warning(this, "警告", "这是一个严重警告框");
});// 错误提示框
connect(ui->errBtn, &QPushButton::clicked, [=](){QMessageBox::critical(this, "错误", "这是一个严重错误");
});// 问题询问框
connect(ui->questionBtn, &QPushButton::clicked, [=](){QMessageBox::question(this, "询问", "你选yes 还是 no", QMessageBox::Ok|QMessageBox::Cancel, QMessageBox::Cancel);
});

3.2 中文按钮

使用构造函数创建按钮

// 使用 QMessageBox 构造函数创建提示框
QMessageBox myBox(QMessageBox::Question, "努力脱单", "你愿意嫁给我吗!", QMessageBox::Yes| QMessageBox::No
);// 设置按钮文字
myBox.setButtonText(QMessageBox::Yes, "愿意");    //方式1
myBox.button(QMessageBox::No)->setText("滚蛋");   //方式2int Ret = myBox.exec();     // 获取点击的按钮
if(Ret == QMessageBox::Yes) //通过判断返回值确定用户点击了愿意还是滚蛋。
{qDebug() << "太好了!";
}
else if(Ret == QMessageBox::No)
{qDebug() << "滚犊子";
}

3.3 文件选择框

QFileDialog 类能弹出一个文件选择框

静态方法:

  • getOpenFileName(参数1, 参数2, 参数3, 参数4) : 打开文件

  • getSaveFileName(参数1,参数2,参数3,参数4) : 保存文件

    • 参数1: 父组件

    • 参数2:标题栏文本

    • 参数3:打开的文件夹

    • 参数4:过滤的文件类型, 如果过滤多种文件类型,需要使用 ;; 进行分割

    • 返回值: 选择的文件的绝对路径,如果选择 "取消" 按钮则返回空

  • getExistingDirectory(参数1, 参数2, 参数3) : 打开路径

    • 参数1: 父组件

    • 参数2:标题栏文本

    • 参数3:默认打开的文件夹

  • 返回值: 选中的目录的绝对路径

打开文件

// 文件对话框
connect(ui->fileBtn, &QPushButton::clicked, [=](){QString filePath = QFileDialog::getOpenFileName(this, "选择文件", "C:/Users/Administrator/Documents", "*.txt;;*.jpg;;*.png");qDebug() << filePath;
});

保存文件

connect(ui->saveBtn, &QPushButton::clicked, [=](){QString filePath = QFileDialog::getSaveFileName(this, "保存", "./", "*.txt");qDebug() << filePath;
});

打开目录

connect(ui->dirBtn, &QPushButton::clicked, [=](){QString dirPath = QFileDialog::getExistingDirectory(this, "打开目录", "e:/c++/QT");qDebug() << dirPath;});

3.4 颜色选择器

  • QColorDialog 类能够弹出一个颜色选择框

  • 静态方法:

    • getColor(QColor)

  • QColor(red, green, blue, alpha) 类用来设置颜色

    • red() \ green() \ blue() : 获取红色、绿色、蓝色 的色值

// 颜色选择器
connect(ui->colorBtn, &QPushButton::clicked, [=](){// 方式一:   打开颜色选择器//  getColor() : 空参时 默认选中白色QColor color = QColorDialog::getColor();// 设置:初始值// QColor(red, green, blue);QColor color = QColorDialog::getColor(QColor(123, 255, 89));qDebug() << color.red() << color.green() << color.blue() << color.alpha();});connect(ui->colorBtn, &QPushButton::clicked, [=](){// 方式二:QColorDialog colorDia(Qt::cyan);   // 打开颜色选择器,指定默认颜色colorDia.setOption(QColorDialog::ShowAlphaChannel);  // 显示透明度选项colorDia.exec();// 当点击确定按钮时获取的颜色QColor color = colorDia.currentColor();
});

3.5 字体选择器

  • QFontDialog 类能够弹出一个字体选择框

  • 静态方法:

    • getFont(bool)

    • getFont(bool, QFont())

  • QFont 方法

    • setFamily() \ family() : 设置 \ 获取 文本字体

    • setPointSize() \ pointSize() : 设置 \ 获取 字体大小

    • setBold(bool) \ bold() : 设置 \ 获取 文字是否加粗

    • setItalic(bool) \ italic() : 设置 \ 获取 文字是否倾斜

connect(ui->fontBtn, &QPushButton::clicked, [=](){// 方式一: 弹出字体选择框,所有均为默认值bool flag;   // 保存用户最终点击的是 确定 还是 取消QFont font = QFontDialog::getFont(&flag);qDebug() << font.family() << font.pointSize() << font.bold() << font.italic();qDebug() << flag;
});connect(ui->fontBtn, &QPushButton::clicked, [=](){// 方式二: 弹出字体选择框,并设置默认值bool flag;QFont font = QFontDialog::getFont(&flag, QFont("微软雅黑", 20, true, true));qDebug() << font.family() << font.pointSize() << font.bold() << font.italic();qDebug() << flag;
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/441274.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ansible学习之ansible-pull命令

想要知道ansible-pull是用来做什么的&#xff0c;就需要了解Ansible的工作模&#xff0c;Ansible的工作模式有两种&#xff1a; push模式 push推送&#xff0c;这是Ansible的默认模式&#xff0c;在主控机上编排好playbook文件&#xff0c;push到远程主机上来执行。pull模式 p…

RISC-V知识点目录

分支预测 分支预测概述https://blog.csdn.net/zhangshangjie1/article/details/136947089?sharetypeblogdetail&sharerId136947089&sharereferPC&sharesourcezhangshangjie1&spm1011.2480.3001.8118分支指令的方向预测https://blog.csdn.net/zhangshangjie1/a…

如何革新源代码保密?七大方法教你应对!

在数字化时代&#xff0c;源代码的安全保密对于企业而言至关重要&#xff0c;它不仅关系到企业的核心竞争力&#xff0c;还涉及到知识产权的保护。源代码一旦泄露&#xff0c;可能会给企业带来无法估量的损失。因此&#xff0c;采取有效的源代码保密措施&#xff0c;是每个企业…

【电路】1.3 电功率和能量

1.3 电功率和能量 电是一种能量存在形式。 1.3.1 电压的定义 将单位正电荷由A点移动至B点&#xff0c;电场力所做的功是 w w w&#xff0c;则 u A B d w d q u_{AB}\frac{dw}{dq} uAB​dqdw​&#xff0c; w w w是功&#xff0c; q q q是电荷量从A到B&#xff0c;沿着任意路…

D3.js中国地图可视化

1、项目介绍 该项目来自Github&#xff0c;基于D3.js中国地图可视化。 D3.js is a JavaScript library for manipulating documents based on data. It uses HTML, SVG, and CSS to display data. The full name of D3 is "Data-Driven Documents," which means it a…

C++11--列表初始化和声明

统一的列表初始化 { } 初始化 C11引入了统一的 列表初始化&#xff08;Uniform Initialization&#xff09;&#xff0c;这是一种使用大括号 { } 初始化变量和对象的新语法&#xff0c;旨在简化初始化过程并提高代码的可读性和一致性。 这种初始化方式适用于几乎所有类型&am…

轻松掌握IP代理服务器设置方法,网络冲浪更自如

在数字化时代&#xff0c;互联网就像是一片浩瀚的海洋&#xff0c;而IP代理服务器就如同我们在这片海洋中航行的指南针。通过使用代理IP&#xff0c;我们可以更方便地访问全球网络资源&#xff0c;提升网络安全性。本文将为您详细介绍IP代理服务器的设置方法&#xff0c;让您在…

Library介绍(四)

标准单元描述 标准单元主要由以下几个部分构成&#xff0c;分别是引脚电容、power、timing组成。其中引脚电容主要包含input/output pin的电容值。 power主要包含每个pin的leakage power和internal power。 timing主要包括cell的input pin到output pin的rise delay和fall del…

人才画像系统是什么?有哪些功能和作用?

人才画像系统是一种先进的人力资源管理工具&#xff0c;它运用大数据和人工智能技术对员工的多方面特征进行深度分析。系统通过汇聚个人的教育背景、工作经验、技能掌握、性格特质及行为数据等信息&#xff0c;结合数据挖掘和机器学习算法&#xff0c;构建出每位员工的数字化“…

Spring Boot:打造下一代医院管理系统

3系统分析 3.1可行性分析 通过对本医院管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本医院管理系统采用JAVA作为开发语言&#xff0c;Spring Boot框…

【漏洞复现】网动统一通信平台/网动统一通信平台ActiveUC存在任意文件下载

》》》产品描述《《《 网动统一通信平台是采用统一的通信界面&#xff0c;将VoIP电话系统、电子邮件等多种沟通方式融合的企业IT平台。 》》》漏洞描述《《《 网动统一通信平台是采用统一的通信界面&#xff0c;将VoIP电话系统、电子邮件等多种沟通方式融合的企业IT平台。网动统…

原生input实现时间选择器用法

2024.10.08今天我学习了如何用原生的input&#xff0c;实现时间选择器用法&#xff0c;效果如下&#xff1a; 代码如下&#xff1a; <div><input id"yf_start" type"text"> </div><script>$(#yf_start).datepicker({language: zh…

【Maven】依赖管理,Maven仓库,Maven核心功能

Maven 是一个项目管理工具&#xff0c;基于 POM&#xff08;Project Object Model&#xff0c;项目对象模型&#xff09;的概念&#xff0c;Maven 可以通过一小段描述信息来管理项目的构建&#xff0c;报告和文档的项目管理工具软件 大白话&#xff1a;Maven 是一个项目管理工…

初始爬虫12(反爬与反反爬)

学到这里&#xff0c;已经可以开始实战项目了&#xff0c;多去爬虫&#xff0c;了解熟悉反爬&#xff0c;然后自己总结出一套方法怎么做。 1.服务器反爬的原因 服务器反爬的原因 总结&#xff1a; 1.爬虫占总PV较高&#xff0c;浪费资源 2.资源被批量抓走&#xff0c;丧失竞争力…

MySQL从0到1基础语法笔记(上)

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;Java Web关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 目录 MySQL笔记&#xff1a; 一、注释&#xff1a; 二、SQL四大类&#xff…

《贪吃蛇小游戏 1.0》源码

好久不见&#xff01; 终于搞好了简易版贪吃蛇小游戏&#xff08;C语言版&#xff09;&#xff0c;邀请你来玩一下~ 目录 Snake.h Snake.c test.c Snake.h #include<stdio.h> #include<windows.h> #include<stdbool.h> #include<stdlib.h> #inclu…

LeetCode 11 Container with Most Water 解题思路和python代码

题目&#xff1a; You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the ith line are (i, 0) and (i, height[i]). Find two lines that together with the x-axis form a container, such that the co…

基于comsol模拟微穿孔板和卷曲通道的混合吸声器低频吸声

研究背景&#xff1a; 具有深亚波长厚度&#xff08;5cm&#xff09;的吸收器对低频声音&#xff08;<500Hz&#xff09;的衰减在噪声控制工程中引起了极大的兴趣。然而&#xff0c;由于低频声音的强穿透性和普通材料的弱固有分散性&#xff0c;这是一项具有挑战性的任务。…

算法知识点————贪心

贪心&#xff1a;只考虑局部最优解&#xff0c;不考虑全部最优解。有时候得不到最优解。 DP&#xff1a;考虑全局最优解。DP的特点&#xff1a;无后效性&#xff08;正在求解的时候不关心前面的解是怎么求的&#xff09;&#xff1b; 二者都是在求最优解的&#xff0c;都有最优…

电脑无法无线投屏的解决办法

在前司的时候经常遇到电脑无法使用无线投屏器的情况&#xff0c;今天就来聊聊如何解决。 1.不会连接。这种情况&#xff0c;经常发生在WIN10升级WIN11之后&#xff0c;一般是两种办法&#xff0c;一种是同时按键盘上的WINDOWS和K键&#xff0c;右下角就会出来连接的图标&#…