搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
小小林熬夜学编程
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Ubuntu20.04安装Anaconda_anaconda ubuntu20
2
SystemVerilog(七)-网络
3
在ubuntu上创建WiFi热点
4
企业家如何拥有良好口才的能力(3篇)
5
在Windows电脑上快速运行AI大语言模型-Llama3_笔记本运行llama3特别慢
6
一个C++程序重构的例子——糟糕的代码_c++重构例子
7
python常用接口调用_python 调用接口
8
超小白详细解决方法:IDEA中打开的文件里没有maven怎么办?_不是管理员权限找不到maven
9
Qt运行时,如何设置第一个聚焦的控件
10
「大数据集群的搭建和使用」背景知识:大数据Hadoop生态圈介绍
当前位置:
article
> 正文
lesson4-Qt窗口
作者:小小林熬夜学编程 | 2024-05-24 04:57:40
赞
踩
openaction和newaction
一、QWidget子类
QWidget类是所有用户界面的基类,我们经常用的一些构成界面的类都是继承自它,例如QPushButton、QLabel等等
QWidget实现的功能就是将窗口部件显示到屏幕上,而要创建一个复杂的窗口,就必须实现它的子类。如果我们单独的实现一个QWidget类,那么你将看到一个没有任何功能的窗口
1、基础窗口部件
1)QAbstractButton的子类(按钮)
QCheckBox 复选框
QPushButton 按钮
QRadioButton 单选
QToolButton 快速存取
2)QAbstractSlider的子类(范围)
QDial 圆形范围
QScrollBar 滚动条
QSlider 滑块
3)QAbstractSpinBox的子类(显示数值)
QDateTimeEdit 编辑日期和时间
QDateEdit 编辑日期
QDoubleSpinBox 可以上下调节数值
QSpinBox
4)QFram的子类
QLabel 标签
QToolBox 列标签
QSpplitter 分离器
QMenu 菜单
QProgressBar 进度条
5)直接继承QWidget的类
QDialog
QMainWindow
2、复杂窗口部件
QCalenderWidget 日历控件
QTabblelView表视图
QListView 列表视图
QTreeView 树视图
QWebView web视图
二、QMainWindow类
Qt的QMainWindow类提供了一个应用程序的主窗口,包括一个菜单栏、多个工具栏、多个锚接部件、一个状态栏、以及一个中心部件
1、菜单栏
1)菜单栏是按照程序功能排列的按钮的集合,在标题栏的下面。
2)菜单栏包含文件、查看、编辑等多个菜单
3)菜单栏内部是一系列命令。在Qt中为了使菜单项和工具栏的命令有一致性,使用action来表示这些命令。因此Qt菜单就是用一系列QAction对象构成的列表,菜单栏包含一系列的菜单
4)一个Qt程序只能有一个菜单栏
2、工具栏
1)工具栏是一系列类似于按钮的动作排列成的面板,由一些经常使用的动作组成
2)工具栏位于菜单栏的下面,状态栏的上面。工具栏可以停靠在主窗口的上、下、左、右4个方向。
3)一个主窗口可以包含多个工具栏
3、锚接部件
1)锚接部件一般多为一个容器来使用,以包容其他窗口部件来实现功能
2)对于一个标准的Qt主窗口而言,锚接部件并不是必须的。
3)锚接部件可以作为一个窗口浮动在主窗口的上面,也可以像工具栏一样停靠在主窗口的上、下、左、右4个方向
4)一个主窗口可以包含多个锚接部件
4、状态栏
1)状态栏是包含文本输出窗格或者“指示器”的控制条
2)状态栏位于每个窗口的最底端
3)状态栏可以添加Qt窗口部件
4)一个主窗口最多只有一个状态栏
5、中心部件
主窗口的中心,一个主窗口只有一个中心部件。主窗口有自己的布局管理器,因此不能再给主窗口设置布局,但是可以给中心部件设置布局
三、创建主窗口
纯代码创建
1、头文件
头文件中应该具备的资源:
菜单栏:QMenu *fileMenu, *editMenu, *helpMenu
工具栏:QToolBar *fileToolBar, *editToolBar
状态栏:QStatusBar
中心部件
锚接部件 dock
动作:QAction *openAction, *newAction, *saveAction, *exitAction
动作:QAction *copyAction, *cutAction, *pasteAction,
动作:QAction *aboutAction
槽函数:openSlot(), saveSlot(), newSlot(), aboutSlot()
私有函数:
void createActions()
void createMenus()
void createToolBar();
void setStatusBar();
2、资源文件
application.qrc
images/open.png
images/copy.png
images/cut.png
images/paste.png
3、createAction
//创建动作
openAction = new QAction( QIcon(":/images/open.png"),
tr("打开"), //防止乱码
this
);
//设置快捷键
1)openAction->setShortcuts(QKeySequence::Open)
2)openAction->setShortcut(QKeySequence(tr("Ctrl+o")))
3)openAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_O))
//设置状态栏信息
openAction->setStatusTip(tr("打开"))
//关联信号和槽函数
connect(openAction, SIGNAL(triggered()), this, SLOT(openSlot()))
4、createrMenus
menuBar()可以获得菜单栏的指针
//添加菜单
fileMenu = menuBar()->addMenu(tr("文件"));
//为菜单添加活动
fileMenu->addAction(openAction);
//添加分割线
menuBar()->addSeparator();
5、createrToolBar
QMainWindow::addToolBar()函数可以创建工具栏
//添加工具栏
fileToolBar = addToolBar(tr("文件"))
//给工具栏添加动作
fileToolBar->addAction(openAction)
6、statusBar
statusBar()函数可以获取状态栏的指针
statusBar()->showMessage(tr("准备"));
7、中心部件
setCentralWidget(textEdit)
8、锚接部件
锚接窗口简单的说就是一个可以“四处移动”的活动窗口
工具栏是锚接窗口的子类,所以一切适用于锚接窗口的函数都适用于工具栏
用户可以将锚接窗口摆放在锚接区域的任意有效位置,可以在代码中指定锚接窗口所处的位置:
添加锚接窗口:
//创建锚接窗口
QDockWidget dock = new QDockWidget(tr("name"), this)
//向锚接窗口里面添加控件
dock->setWidget(textEdit)
//将锚接窗口加载到主窗口
addDockWidget(Qt::LeftDockWidgetArea, dock)
//也可以将锚接部件移除
removeDockWidget(dock);
四、源代码
资源文件
点击(
此处
)折叠或打开
!
DOCTYPE RCC
>
RCC version
=
"1.0"
>
qresource
>
file
>
images/open
.
png
/
file
>
file
>
images/copy
.
png
/
file
>
file
>
images/cut
.
png
/
file
>
file
>
images/paste
.
png
/
file
>
/
qresource
>
/
RCC
>
头文件
点击(
此处
)折叠或打开
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
QtGui
>
class
mainWindow
:
public
QMainWindow
{
Q_OBJECT
public
:
mainWindow
(
)
;
private
slots
:
void openSlot
(
)
;
void saveSlot
(
)
;
void exitSlot
(
)
;
private
:
QMenu
*
fileMenu
;
QMenu
*
editMenu
;
QMenu
*
helpMenu
;
QToolBar
*
fileToolBar
,
*
editToolBar
;
QTextEdit
*
textEdit
,
*
text
;
QAction
*
openAct
,
*
saveAct
,
*
exitAct
;
QAction
*
cutAct
,
*
copyAct
,
*
pasteAct
;
QAction
*
aboutAct
;
QDockWidget
*
dock
;
void createActions
(
)
;
void createMenus
(
)
;
void createToolBar
(
)
;
void setStatusBar
(
)
;
void createDockWidget
(
)
;
}
;
#endif
mainWindow.cpp
点击(
此处
)折叠或打开
#include
"mainWindow.h"
mainWindow
:
:
mainWindow
(
)
{
setWindowTitle
(
"haha"
)
;
textEdit
=
new QTextEdit
(
)
;
/
/
设置中心部件
setCentralWidget
(
textEdit
)
;
/
/
创建动作
createActions
(
)
;
/
/
创建菜单
createMenus
(
)
;
/
/
创建工具条
createToolBar
(
)
;
/
/
设置状态栏
setStatusBar
(
)
;
/
/
创建锚接部件
createDockWidget
(
)
;
}
void mainWindow
:
:
openSlot
(
)
{
}
void mainWindow
:
:
saveSlot
(
)
{
}
void mainWindow
:
:
exitSlot
(
)
{
}
void mainWindow
:
:
createActions
(
)
{
/
/
创建QAction(资源,名字,父窗口)
openAct
=
new QAction
(
QIcon
(
":/images/open.png"
)
,
tr
(
"打开"
)
,
this
)
;
/
/
快捷键
openAct
-
>
setShortcut
(
QKeySequence
(
tr
(
"ctrl+o"
)
)
)
;
/
/
设置状态栏提示
openAct
-
>
setStatusTip
(
tr
(
"打开文件"
)
)
;
/
/
关联信号和槽函数
connect
(
openAct
,
SIGNAL
(
triggered
(
)
)
,
this
,
SLOT
(
openSlot
(
)
)
)
;
}
void mainWindow
:
:
createMenus
(
)
{
/
/
添加菜单
fileMenu
=
menuBar
(
)
-
>
addMenu
(
tr
(
"文件"
)
)
;
/
/
为菜单添加动作
fileMenu
-
>
addAction
(
openAct
)
;
}
void mainWindow
:
:
createToolBar
(
)
{
/
/
添加工具栏
fileToolBar
=
addToolBar
(
tr
(
"文件"
)
)
;
/
/
为工具栏添加动作
fileToolBar
-
>
addAction
(
openAct
)
;
}
void mainWindow
:
:
setStatusBar
(
)
{
/
/
设置状态栏信息
statusBar
(
)
-
>
showMessage
(
tr
(
"准备"
)
)
;
}
void mainWindow
:
:
createDockWidget
(
)
{
/
/
创建锚接部件
dock
=
new QDockWidget
(
tr
(
"锚接窗口"
)
,
this
)
;
/
/
向锚接部件添加控件
text
=
new QTextEdit
(
)
;
dock
-
>
setWidget
(
text
)
;
/
/
将锚接部件加到主窗口
addDockWidget
(
Qt
:
:
RightDockWidgetArea
,
dock
)
;
}
main.cpp
点击(
此处
)折叠或打开
#include
"mainWindow.h"
#include
QApplication
>
int
main
(
int
argc
,
char
*
argv
[
]
)
{
/
/
设置编码,防止汉字出现乱码
QTextCodec
:
:
setCodecForCStrings
(
QTextCodec
:
:
codecForName
(
"utf-8"
)
)
;
QTextCodec
:
:
setCodecForTr
(
QTextCodec
:
:
codecForName
(
"utf-8"
)
)
;
QApplication app
(
argc
,
argv
)
;
mainWindow win
;
win
.
show
(
)
;
return app
.
exec
(
)
;
}
结果
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/615917
推荐阅读
article
基于
springboot
的
采购
管理系统
的
设计与实现...
对比要实现
的
功能来分析出用户
的
需求,可以让用户在线对其进行查看材料信息、公告信息等信息,这不仅满足了用户
的
需求,还大大
的
...
赞
踩
article
好工具推荐系列:
Feem
和
Send
-
anywhere
,跨平台
局域网
传输工具,文件共享工具_senda...
Feem
是一款免费的真正意义上的全平台跨设备文件传输应用,支持 iOS、Android、Windows、macOS、Li...
赞
踩
article
kafka
和
rabbitmq
的区别...
一、语言不同RabbitMQ是由内在高并发的erlanng语言开发,用在实时的对可靠性要求比较高的消息传递上。
kafka
...
赞
踩
article
YOLOv8
优化策略:
轻量化
改进 |
MobileNetV3
,轻量级骨架首选_
yolov8s
更换mo...
MobileNetV3
的创新点包括:使用自适应瓶颈宽度、借鉴SENet中的Squeeze-and-Excitation机...
赞
踩
article
TCP
协议
解码
详解_tcp
解码
...
TCP
协议
解码
详解一、
TCP
协议
简介
TCP
,全称Transfer Control Protocol,中文名为传输控...
赞
踩
article
HTTP
采用的
SSL
/
TLS
标准如何保证通信的
安全性
?_
http
协议如何保障
安全性
...
数据加密:
SSL
/
TLS
使用公钥加密和私钥解密的方式对通信数据进行加密。加密后的数据只能使用服务器持有的私钥进行解密,确...
赞
踩
article
java
对象
集合
判断某个属性
的
值是否包含在定义
的
一个
数组里面...
在Java中,如果你想检查
集合
中
对象
的
某个属性
的
值是否包含在
一个
预定义
的
数组内,可以结合使用Java 8
的
Stream ...
赞
踩
article
【
华为
OD
机试
真题
C
语言
】16、
整数
对
最小
和 |
机试
真题
+思路参考+代码解析_
华为
整数
对
最小
和...
给定两个
整数
数组array1、array2,数组元素按升序排列。 假设从array1、array2中分别取出一个元素可构...
赞
踩
article
java
取
集合
对象某个
属性
的
值...
首先,定义一个简单
的
类作为示例,它有一个名为// 构造方法、getter和setter省略...
java
取
集合
对象某个...
赞
踩
article
202404
最新
java
调用通义千问
的
api
接口...
武汉是一座充满历史文化魅力和现代活力
的
城市,4月20日
的
周末可以考虑以下几个既经济实惠又好玩
的
活动:1. **东湖绿道骑...
赞
踩
article
python
中
使用
关键字
声明
一个
函数
,Python
函数
的说明与运用...
Python
函数
的说明与运用
函数
定义:
函数
是一组语句的集合,用以实现某一特定功能。
函数
可简化脚本,
函数
包括内置
函数
和自定...
赞
踩
article
整数
对
最小
和-华为OD_
整数
对
最小
和
od
...
接下来一行,正
整数
k 0 < k _
整数
对
最小
和
od
整数
对
最小
和
od
...
赞
踩
article
【
kafka
可视化
工具】
kafka
-
eagle
在
windows
环境的
下载
、
安装
、
启动与访问_kafk...
本文目录一
、
Kafka
eagle
的
下载
步骤一:访问官方网站:Download - EFAK步骤二:点击 Direct ...
赞
踩
article
基于Vivado
MIG
IP核的
DDR3
控制器
(
DDR3
_CONTROL)_
ddr
中的contro...
一、前言由于
DDR3
的控制时序相当复杂,为了方便用户开发
DDR3
的读写应用程序,Xilinx官方就提供了一个
MIG
(Me...
赞
踩
article
简单易懂
的
Docker
下载安装
教程
:快速上手
容器
化
应用
...
Docker
作为一种流行
的
容器
化技术,可以帮助开发者快速构建、交付和运行
应用
程序。本
教程
将为你提供一个简单易懂
的
Dock...
赞
踩
article
Android
studio
大
作业-
体育场
预约
管理系统
(
1
)...
下载链接:https://download.csdn.net/download/weixin_4347470
1
/203
1
...
赞
踩
article
山东大学软件学院创新实训-研究
通义
千问
大
模型
的Java
调用
笔记_
通义
千问
api
调用
systemmsg
...
在非流式输出方式中,等待
模型
生成结束后,所有中间结果将被拼接成最终结果,然后返回。相比之下,流式输出可以实时地将中间结果...
赞
踩
article
Docker
下载
&
安装
&
使用
(简单教程
)
_
docker
下载
...
虚拟化容器技术。
Docker
基于镜像,可以秒级启动各种容器。每一种容器都是一个完整的运行环境,容器之间互相隔离。
安装
Do...
赞
踩
article
Swagger
字段
属性说明不
显示
...
解决此问题的一般步骤是先检查模型类上的注解是否完整且正确,然后检查
Swagger
的配置,最后考虑是否存在版本兼容性或前端...
赞
踩
article
Sql力扣算法:185.
部门
工资
前三高
的
所有员工_
sql
查询
工资
最高
的
三个人...
Sql力扣算法:185.
部门
工资
前三高
的
所有员工_
sql
查询
工资
最高
的
三个人
sql
查询
工资
最高
的
三个人 ...
赞
踩
相关标签
spring boot
后端
java
开发语言
java-ee
maven
mybatis
feem
跨平台
局域网
工具
传输
YOLO
人工智能
深度学习
cnn
神经网络
tcp
工作
header
byte
网络
https
ssl