Windows图形界面(GUI)-QT-C/C++ - QT 窗口属性

  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页

目录

标题栏

基本概念

设置窗口标题

隐藏标题栏

UI编辑器

窗口关闭事件

窗口大小调整事件

窗口移动事件

自定义标题栏

菜单栏

基本概念

设置菜单栏(API)

设置菜单栏(UI)

工具栏

基本概念

设置工具栏(API)

设置工具栏(UI)

状态栏

基本概念

设置状态栏(API)


标题栏

  • 基本概念

    • 标题栏是窗口管理系统(如 Windows、macOS、Linux 等)的一部分,用于显示窗口的标题和控制按钮(如最小化、最大化和关闭按钮)。在 Qt 中,标题栏是由窗口管理系统处理的,但我们可以通过 Qt 提供的方法来设置标题栏的内容和行为。
  • 设置窗口标题

    • 使用 QWidget 或其子类(如 QMainWindow)的 setWindowTitle() 方法可以设置窗口的标题。
  • 隐藏标题栏

    • 可以通过设置窗口标志(Window Flags)来隐藏窗口的标题栏window.setWindowFlags(Qt::FramelessWindowHint);
  • UI编辑器

    • 选择主窗口(如 QMainWindowQWidget)。

    • 在右侧的属性编辑器中,找到 windowTitle 属性。

    • 设置 windowTitle 属性为您希望的标题文本。

  • 窗口关闭事件

    • 处理窗口关闭事件可以覆盖 closeEvent 方法
  • 窗口大小调整事件

    • 处理窗口大小调整事件可以覆盖 resizeEvent 方法
  • 窗口移动事件

    • 处理窗口移动事件可以覆盖 moveEvent 方法
  • 自定义标题栏

    • 在某些情况下,您可能希望完全自定义标题栏的外观和行为。可以通过隐藏默认的标题栏并创建自定义的标题栏来实现。
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) , ui(new Ui::MainWindow)
{ui->setupUi(this);//窗口标题this->setWindowTitle("0xCC");//隐藏标题//this->setWindowFlags(Qt::FramelessWindowHint);}class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();public://窗口关闭void closeEvent(QCloseEvent *event) override{if(QMessageBox::question(this, "提示", "是否关闭窗口") == QMessageBox::Yes){this->close();}}//窗口大小//virtual void resizeEvent(QResizeEvent *event)// const QSize &size() const//窗口移动//virtual void moveEvent(QMoveEvent *event)//const QPoint &pos() constprivate:Ui::MainWindow *ui;
};
  • 菜单栏

  • 基本概念

    • 菜单栏是应用程序窗口的一部分,包含一个或多个菜单,每个菜单又包含多个菜单项。菜单项可以是命令、子菜单或其他功能,如复选框和单选按钮。菜单栏在 QMainWindow 中默认提供,并可以通过编程或使用 Qt Designer 进行设置。
  • 设置菜单栏(API)

    • 在 Qt 中,可以通过 QMenuBar 类来创建和管理菜单栏。

    • 菜单栏 - QMenuBar

    • 菜单项 - QMenu

    • 子菜单 - QAction

    MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) , ui(new Ui::MainWindow)
    {
    ui->setupUi(this);//创建菜单栏
    QMenuBar* menuBar = new QMenuBar(this);//创建菜单项
    QMenu* fileMenu = new QMenu("文件", this);
    QMenu* EditMenu = new QMenu("编辑", this);//关联菜单项
    menuBar->addMenu(fileMenu);
    menuBar->addMenu(EditMenu);//添加子菜单
    QAction* openAction = new QAction("打开", this);
    QAction* exitAction = new QAction("退出", this);
    QAction* copyAction = new QAction("复制", this);fileMenu->addAction(openAction);
    fileMenu->addAction(exitAction);
    EditMenu->addAction(copyAction);//关联槽函数
    connect(exitAction, &QAction::triggered, this, &MainWindow::close);//设置菜单栏
    this->setMenuBar(menuBar);
    }
    
  • 设置菜单栏(UI)

    • 设置步骤

      • 打开 Qt Designer 并加载您的主窗口 UI 文件。

      • 在窗口顶部,找到菜单栏区域(通常显示为“Type Here”)。

      • 点击“Type Here”并输入菜单名称(如“File”)。

      • 右键单击新创建的菜单,选择“Add Action”创建菜单项。

      • 在属性编辑器中,可以设置菜单项的属性,如文本、快捷键和图标。

    • 属性设置

      • 菜单

        • title:菜单的标题文本。

        • enabled:是否启用菜单,默认为 true

        • visible:是否可见,默认为 true。(setVisible)

      • 菜单项

        • text:菜单项的文本。

        • icon:菜单项的图标。

        • shortcut:菜单项的快捷键,例如 Ctrl+O

        • checkable:是否为可选菜单项(复选框或单选按钮),默认为 false

        • checked:如果 checkabletrue,则表示菜单项是否被选中,默认为 false

        • enabled:是否启用菜单项,默认为 true

        • visible:是否可见,默认为 true

 

  • 工具栏

  • 基本概念

    • 在 Qt 中,工具栏(QToolBar)是用户界面中常用的一个组件,用于快速访问应用程序中最常用的功能。

    • QToolBar:Qt 中的工具栏类,继承自 QWidget

    • QAction:表示一个可以添加到菜单、工具栏或上下文菜单的操作。

  • 设置工具栏(API)

    • 创建工具栏 - QToolBar

    • 添加动作到工具栏 - addAction

    MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) , ui(new Ui::MainWindow)
    {ui->setupUi(this);//创建工具栏QToolBar* toolBar = new QToolBar(this);//设置工具栏this->addToolBar(toolBar);//添加工具项QAction* newAction = new QAction("New", this);QAction* openAction = new QAction("Open", this);QAction* saveAction = new QAction("Save", this);//关联工具项toolBar->addAction(newAction);toolBar->addAction(openAction);toolBar->addAction(saveAction);//绑定控件类QLineEdit* lineEdit = new QLineEdit(this);toolBar->addWidget(lineEdit);//设置停靠区域toolBar->setAllowedAreas(Qt::TopToolBarArea | Qt::LeftToolBarArea);//设置浮动toolBar->setFloatable(0);//设置移动toolBar->setMovable(1);//创建工具栏QToolBar* toolBar2 = new QToolBar(this);//设置工具栏this->addToolBar(Qt::BottomToolBarArea,toolBar2);//添加工具项QAction* copyAction = new QAction("copy", this);QAction* pasteAction = new QAction("Paste", this);QAction* cutAction = new QAction("Cut", this);//关联工具项toolBar2->addAction(copyAction);toolBar2->addAction(pasteAction);toolBar2->addAction(cutAction);}
  • 设置工具栏(UI)

    • 添加工具栏:

      • 在主窗口上右键点击,选择“添加工具栏”。

    • 设置工具栏属性:

      • 在属性编辑器中,可以设置工具栏的名称、浮动性、可移动性等属性。

    • 添加动作:

      • 在动作编辑器中创建动作,然后将动作拖拽到工具栏上。

    • 属性设置

      • objectName:控件的内部名称,用于代码中引用该工具栏。

      • windowTitle:工具栏的窗口标题,通常在工具栏浮动时显示。

      • allowedAreas:定义工具栏可以停靠的区域(顶部、底部、左侧、右侧或任意组合)。

      • floatable:是否允许工具栏浮动。如果设置为 true,工具栏可以被拖出主窗口并独立显示。

      • movable:是否允许移动工具栏。如果设置为 true,用户可以拖动工具栏并重新定位。

      • orientation:工具栏的方向,默认为水平方向(Qt::Horizontal),也可以设置为垂直方向(Qt::Vertical)。

      • iconSize:工具栏中图标的大小。可以设定一个 QSize 来指定宽度和高度。

      • toolButtonStyle:工具栏按钮的样式。可以是只显示图标、只显示文字、同时显示或者按照按钮的默认设置。

  • 状态栏

  • 基本概念

    • 在 Qt 应用程序中,状态栏(QStatusBar)通常位于应用程序窗口的底部,用于显示临时的状态信息、提示信息或其他动态内容。

    • 状态栏(QStatusBar):显示应用程序的当前状态信息和其他短暂的信息。通常用于提示用户当前的操作状态、显示进度或提供简单的帮助信息。

  • 设置状态栏(API)

    • 创建并设置状态栏 - 使用 QMainWindowstatusBar() 方法创建和获取状态栏实例。

    • 显示简单文本信息 - 使用 showMessage() 方法在状态栏显示文本。

    • 添加永久信息 - 可以使用 addPermanentWidget() 方法在状态栏中添加永久的控件(如标签或进度条)。

    MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) , ui(new Ui::MainWindow)
    {ui->setupUi(this);QStatusBar* statusBar = new QStatusBar(this);this->setStatusBar(statusBar);statusBar->showMessage("欢迎进入QT学习", 3000);QLabel* labelVer = new QLabel("Ver -> 1.0", this);statusBar->addPermanentWidget(labelVer);QProgressBar* progressBarFile = new QProgressBar(this);progressBarFile->setRange(0, 100);statusBar->addPermanentWidget(progressBarFile);progressBarFile->setValue(66);connect(ui->pushButton, &QPushButton::clicked, [=](){statusBar->showMessage("FileSave", 2000);});}
    

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

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

相关文章

Linux系统离线部署MySQL详细教程(带每步骤图文教程)

1、登录官网下载对应的安装包 MySQL :: Developer Zone 2、将压缩包上传到服务器上,这里直接上传到/usr/local路径上 使用sftp工具上传到/usr/local目录上 3、解压压缩包 tar -xf mysql-8.0.39-linux-glibc2.17-x86_64.tar.xz 4、将mysql-8.0.39-linux-glibc2.17…

网络安全技术之计算机安全

计算机安全之访问控制策略 访问控制是网络安全防范和保护的主要策略,它的主要任务是保证网络资源不被非法使用和非常访问。它也是维护网络系统安全、保护网络资源的重要手段。各种安全策略必须相互配合才能真正起到保护作用,但访问控制可以说是保证网络…

leetcode刷题记录(六十一)——73. 矩阵置零

(一)问题描述 73. 矩阵置零 - 力扣(LeetCode)73. 矩阵置零 - 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 [http://baike.baidu.com/item/%E5%8E%9F%E5%9…

QT 如何禁止QComboBox鼠标滚轮

一般情况下,QComboBox会相应鼠标的滚轮事件,即当鼠标停靠在QComboBox上方时,滚动鼠标滚轮,QComboBox的选项会发生切换。但这或许并不是我们希望所出现的,尤其是当QComboBox嵌入在QScrollArea中时,用户只是想…

【蓝桥杯】43689.包子凑数

题目描述 小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有 𝑁 种蒸笼,其中第 𝑖 种蒸笼恰好能放 𝐴𝑖 个包子。每种蒸笼都有非常多笼,可以认为是无限笼。  每当有顾客想买 𝑋 个包…

CV与NLP经典大模型解读

一。llm与lora微调策略解读 (1)文本大模型 llama:meta开源语言模型(咱们能负担得起下游任务了)。 lora:绘你模型你也得能训练的动才行(咱们也能微调下游任务)。loradiffusion。 self-instruct:下游任务得规矩些,输入与输出都得有一个标准格式。 peft:将上面三个…

ESP8266-01S的WIFI功能AT指令

1、ATCWMODE——设置wifi模式(STA/AP/STAAP) 设置指令&#xff1a;ATCWMODE<mode> 参数说明&#xff1a;1:station模式 2:sofAP模式 3:stationsofAP模式 查询指令&#xff1a;ATCWMODE? 参数说明&#xff1a;1:station模式 2:sofAP模式 …

Dexie.js内存管理技巧:在大型数据集操作中避免浏览器崩溃

Dexie.js 内存管理技巧&#xff1a;避免浏览器崩溃 在使用 Dexie.js 操作 大型数据集 时&#xff0c;如果不注意内存管理&#xff0c;可能会导致浏览器内存溢出&#xff08;OOM&#xff0c;Out of Memory&#xff09;或崩溃。因此&#xff0c;以下 内存管理技巧 可用于优化性能…

K8S集群常用命令

1&#xff0c;查看pod kubectl get pods -A 查看所有的pod kubectl get pods 这个只查看namespace为default下的pod&#xff0c;也就是只查看默认命名空间下的pod kubectl get pod -A -o wide 查看所有的pod&#xff0c;并且放出的信息更全&#xff08;包含了pod的ip&#xff0…

人机交互(包含推荐软件)

视觉交互、语音交互、笔式交互、触觉交互、虚拟环境交互。 主要的研究方面包括&#xff1a;人机交互界面表示模型与设计方法、可用性工程、可用性评估模型和方法、多模态智能交互技术、智能交互认知技术、语音识别交互、web界面交互设计、移动界面交互设计。 交互设计流程&am…

解锁未来情感科技:AI 机器人 Ropet 搭载的前沿智能黑科技

2025年的国际消费电子产品展览会&#xff08;CES&#xff09;上&#xff0c;一只可爱的“毛绒玩具”成了全场焦点。 当然&#xff0c;这并不是一个单纯的玩偶&#xff0c;而是和《超能陆战队》的大白一样温暖的陪伴机器人。 相信有很多人和小编一样&#xff0c;当年看完《超能…

C++ ranges

C20新增 ranges 新特性 任何可以迭代的对象都可以使用 ranges。头文件&#xff1a;#include 注&#xff1a; std::views是std::ranges::views的别名 常用方法&#xff1a; 1.遍历 正序遍历&#xff1a;for(int i:v) 逆序遍历&#xff1a;for(int i:v|reverse) 2.判断是否为空…

HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载,Scroll滚动到顶部

HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载 效果展示 使用方法 import LoadingText from "../components/LoadingText" import PageToRefresh from "../components/PageToRefresh" import FooterBar from "../components/…

# [游戏开发] Unity中的碰撞与触发器实现:从基础到应用

在游戏开发中,碰撞检测是一个非常普遍且关键的问题。如何判断一个物体是否碰到另一个物体,通常是通过计算物体间的距离或使用专门的物理引擎来实现。随着技术的发展,现代游戏引擎提供了更为便捷和高效的方式——触发器,它通过事件驱动机制,极大简化了碰撞检测和响应过程。…

Flink(八):DataStream API (五) Join

1. Window Join Window join 作用在两个流中有相同 key 且处于相同窗口的元素上。这些窗口可以通过 window assigner 定义&#xff0c;并且两个流中的元素都会被用于计算窗口的结果。两个流中的元素在组合之后&#xff0c;会被传递给用户定义的 JoinFunction 或 FlatJoinFunct…

Py之cv2:cv2(OpenCV,opencv-python)库的简介、安装、使用方法(常见函数、图像基本运算等)

1. OpenCV简介 1.1 OpenCV定义与功能 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库。它为计算机视觉应用程序提供了一个通用的基础设施&#xff0c;并加速了在商业产品中使用机器感知。作为BSD许可的产品&…

JVM 触发类加载的条件有哪些?

目录 一、类加载生命周期 二、主动引用 2.1、创建类的实例 2.2、访问类的静态字段或静态方法 2.3、反射 2.4、初始化类的子类时&#xff0c;先初始化父类 2.5、虚拟机启动时&#xff0c;初始化 main 方法所在的类 2.6、动态语言支持 三、被动引用 3.1、通过子类引用父…

ElasticSearch-Nested 类型与 Object 类型的区别

在 Elasticsearch 中&#xff0c;nested 类型和 object 类型都用于处理嵌套的 JSON 数据&#xff0c;但它们在存储和查询方面有着显著的区别。本文将详细解释这两种类型的区别&#xff0c;并提供具体的示例。 一、基本概念 1. object 类型 定义&#xff1a;object 类型是 Elas…

推荐sdkman管理sdk和jdk

使用SDKMAN安装JDK通常是免费的。 SDKMAN是一个开源的命令行工具&#xff0c;用于管理和切换多个版本的软件开发工具包&#xff08;SDKs&#xff09;&#xff0c;包括JDK。它支持多种JVM相关工具&#xff0c;如Java、Scala、Groovy、Maven、Gradle等。 安装SDKMAN 首先&…

Flink CDC 在阿里云实时计算Flink版的云上实践

摘要&#xff1a;本文整理自阿里云高级开发工程师&#xff0c;Apache Flink Committer 阮航老师在 Flink Forward Asia 2024 生产实践&#xff08;三&#xff09;专场中的分享&#xff0c;主要分为以下四个方面&#xff1a; Flink CDC & 实时计算 Flink CDC YAML 核心功能…