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

Qt概述:基础组件的使用

1. Qt框架简介

Qt是一个跨平台的C++图形用户界面应用程序开发框架,它包含了丰富的GUI组件和强大的功能库。本次示例代码展示了Qt的几个核心概念:

  • QMainWindow:主窗口类,提供标准的应用程序框架
  • **信号与槽**机制:Qt的核心通信机制
  • 基础UI组件:如QPushButtonQLineEdit
  • 消息框QMessageBox的使用

2. 主窗口类定义分析

2.1 头文件保护与命名空间

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

这是标准的头文件保护宏,防止头文件被多次包含。

QT_BEGIN_NAMESPACEQT_END_NAMESPACE宏定义了Qt的命名空间范围:

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

2.2 主窗口类声明

主窗口继承自QMainWindow

class MainWindow : public QMainWindow
{Q_OBJECT

Q_OBJECT宏是Qt元对象系统的关键,它使得类能够使用信号与槽机制。

2.3 构造函数与析构函数

public:MainWindow(QWidget *parent = nullptr);~MainWindow();
  • 构造函数采用parent参数实现对象树管理
  • 析构函数负责资源清理

2.4 槽函数声明

private slots:void on_pushButton_clicked();void on_lineEditTest_textChanged(const QString &);void on_pushButtonTest_clicked();

slots关键字声明这些函数可以作为槽函数接收信号。

3. 信号与槽机制详解

3.1 信号与槽的基本概念

  • 信号(Signal):由对象在特定事件发生时发出
  • 槽(Slot):用于接收和处理信号的函数
  • 连接(Connect):建立信号与槽的关联

3.2 连接方式示例

代码中展示了两种连接方式:

  1. 传统SIGNAL/SLOT宏方式
connect(ui -> ScrollBar,            // 信号发送者SIGNAL(valueChanged(int)),  // 发送的信号ui->labelValue,             // 信号接收者SLOT(setNum(int)));         // 接收者要做的事情,槽 (槽函数)
  1. 新式函数指针方式(注释中):
connect(ui->ScrollBar,&QScrollBar::valueChanged,ui->labelValue,&QLabel::setNum);

3.3 自动连接的命名约定

Qt支持按照特定命名约定自动连接槽函数:

void on_<object name>_<signal name>(<signal parameters>);

如示例中的:

void on_lineEditTest_textChanged(const QString &str);
void on_pushButton_clicked();

4. UI组件使用分析

4.1 主窗口初始化

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);  // 界面文件组件的初始化setWindowTitle("游戏登陆");  // 设置窗口标题
}

4.2 QLineEdit文本变化处理

void MainWindow::on_lineEditTest_textChanged(const QString &str)
{qDebug()<<"收到信号";  // 调试输出ui->labelValue->setText(str);  // 更新标签文本
}

4.3 QPushButton点击处理

void MainWindow::on_pushButton_clicked()
{QString ret = "亲爱的" + ui -> lineEditName ->text() + ui -> lineEditJob  ->text() + ", 欢迎来到王者荣耀!";QMessageBox::information(this, "Welcome!", ret, QMessageBox::Ok);emit ui -> pushButtonTest -> click();   // 手动发信号
}
  • 拼接多个QLineEdit的文本
  • 使用QMessageBox显示信息对话框
  • 手动emit信号触发另一个按钮的点击事件

5. 应用程序入口分析

int main(int argc, char *argv[])
{QApplication a(argc, argv);    // 应用程序对象MainWindow w;       // 创建主窗口实例w.show();           // 显示窗口return a.exec();    // 进入事件循环
}
  • QApplication管理应用程序的控制流和主设置
  • a.exec()启动事件循环,使程序保持运行

6. 完整代码回顾

6.1 头文件 (mainwindow.h)

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_pushButton_clicked();void on_lineEditTest_textChanged(const QString &);void on_pushButtonTest_clicked();private:Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

6.2 源文件 (mainwindow.cpp)

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);  // 界面文件组件的初始化setWindowTitle("游戏登陆");// 信号和槽的关联/*connect(ui -> ScrollBar,            // 信号发送者SIGNAL(valueChanged(int)),  // 发送的信号ui->labelValue,             // 信号接收者SLOT(setNum(int)));         // 接收者要做的事情,槽 (槽函数)// 以上的信号和槽,是自动发送信号的,同时在发送信号的时候,自动传参数  */// 第二种关联方式
//    connect(ui->ScrollBar,
//            &QScrollBar::valueChanged,
//            ui->labelValue,
//            &QLabel::setNum); // setNum有两个重载(int 和 double) 报错//    connect(ui->lineEditTest,
//            &QLineEdit::textChanged,
//            ui->labelValue,
//            &QLabel::setText);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_lineEditTest_textChanged(const QString &str)
{qDebug()<<"收到信号";ui->labelValue->setText(str);
}void MainWindow::on_pushButton_clicked()
{// 单击注册按钮后,就会自动执行QString ret = "亲爱的" + ui -> lineEditName ->text() + ui -> lineEditJob  ->text() + ", 欢迎来到王者荣耀!";QMessageBox::information(this, "Welcome!", ret, QMessageBox::Ok);emit ui -> pushButtonTest -> click();   // 手动发信号}void MainWindow::on_pushButtonTest_clicked()
{qDebug() << "单击按钮";
}

6.3 主程序入口 (main.cpp)

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);    // 应用程序变量aMainWindow w;       // 创建一个窗口w.show();           // 显示窗口return a.exec();    // 进入事件循环, 启动应用程序的死循环
}

通过本文详细分析,我们深入了解了Qt的核心机制信号与槽UI组件的基本使用以及Qt应用程序的基本结构。这些知识是Qt开发的基础,掌握好这些概念对于后续更复杂的Qt开发至关重要。

相关文章:

Qt概述:基础组件的使用

1. Qt框架简介 Qt是一个跨平台的C图形用户界面应用程序开发框架&#xff0c;它包含了丰富的GUI组件和强大的功能库。本次示例代码展示了Qt的几个核心概念&#xff1a; QMainWindow&#xff1a;主窗口类&#xff0c;提供标准的应用程序框架**信号与槽**机制&#xff1a;Qt的核…...

判断使用什么技术来爬取数据详细讲解

判断目标网站使用哪种数据加载形式是爬虫开发的第一步&#xff0c;也是最关键的一步。以下是系统化的诊断方法和步骤&#xff1a; 核心诊断流程 (使用浏览器开发者工具 - Chrome/Firefox为例) 初始观察 (肉眼判断) 页面加载后数据是否立刻可见&#xff1f; 是 → 可能是静态HTM…...

YOLOV7改进之融合深浅下采样模块(DSD Module)和轻量特征融合模块(LFI Module)

目录 一、研究背景​ 二. 核心创新点​ ​2.1 避免高MAC操作​ ​2.2 DSDM-LFIM主干网络​ 2.3 P2小目标检测分支​ ​3. 代码复现指南​ 环境配置 关键修改点 ​4. 实验结果对比​ 4.1 VisDrone数据集性能 4.2 边缘设备部署 4.3 检测效果可视化 ​5. 应用场景​ …...

【仿生机器人】仿生机器人认知-情感系统架构设计报告

来自 gemini 2.5 1. 执行摘要 本报告旨在为仿生机器人头部设计一个全面的认知-情感软件架构&#xff0c;以实现自然、情感智能的互动。拟议的架构将使机器人能够像人类一样&#xff0c;动态生成情绪、进行复杂的表情表达&#xff08;包括情绪掩饰&#xff09;、拥有强大的记忆…...

数学建模期末速成 多目标规划

内容整理自2-6-2 运筹优化类-多目标规划模型Python版讲解_哔哩哔哩_bilibili 求有效解的几种常用方法 线性加权法√ 根据目标的重要性确定一个权重&#xff0c;以目标函数的加权平均值为评价函数&#xff0c;使其达到最优。ɛ约束法 根据决策者的偏好&#xff0c;选择一个主要…...

常见ADB指令

目录 1. 设备连接与管理 2. 应用管理 3. 文件操作 4. 日志与调试 5. 屏幕与输入控制 6. 高级操作&#xff08;需Root权限&#xff09; 7. 无线调试&#xff08;无需USB线&#xff09; 常用组合示例 注意事项 以下是一些常用的 ADB&#xff08;Android Debug Bridge&a…...

IoTGateway项目生成Api并通过swagger和Postman调用

IoTGateway项目生成Api并通过swagger和Postman调用-CSDN博客...

sl4j+log4j日志框架

sl4jlog4j日志框架 slf4j (Simple Loging Facade For Java) 即它仅仅是一个为 Java 程序提供日志输出的统一接口&#xff0c;并不是一个具体的日志实现方案&#xff0c;所以单独的 slf4j 是不能工作的&#xff0c;必须搭配其他具体的日志实现方案&#xff08;例如&#xff1a;…...

小白的进阶之路系列之九----人工智能从初步到精通pytorch综合运用的讲解第二部分

张量是PyTorch中的核心数据抽象。这个交互式笔记本提供了一个深入的介绍torch. Tensor 类., 首先,让我们导入PyTorch模块。我们还将添加Python的数学模块来简化一些示例。 import torch import math创建张量 创建张量最简单的方法是调用torch.empty(): x = torch.empty(…...

深度学习与神经网络 前馈神经网络

1.神经网络特征 无需人去告知神经网络具体的特征是什么&#xff0c;神经网络可以自主学习 2.激活函数性质 &#xff08;1&#xff09;连续并可导&#xff08;允许少数点不可导&#xff09;的非线性函数 &#xff08;2&#xff09;单调递增 &#xff08;3&#xff09;函数本…...

NLP学习路线图(十四):词袋模型(Bag of Words)

在自然语言处理&#xff08;NLP&#xff09;的广阔天地中&#xff0c;词袋模型&#xff08;Bag of Words, BoW&#xff09; 宛如一块历经岁月沉淀的基石。它虽非当今最耀眼的明星&#xff0c;却为整个领域奠定了至关重要的基础&#xff0c;深刻影响了我们让计算机“理解”文本的…...

Oracle数据库事务学习

目录 一、什么是事务&#xff0c;事务的作用是什么 二、事务的四大特性(ACID) 1. 原子性(Atomicity) 2. 一致性(Consistency) 3. 隔离性(Isolation) 4. 持久性(Durability) 三、关于锁的概念——表锁、行锁、死锁、乐观/悲观锁、 1.行锁 2.表锁 3.死锁 4.乐观锁 5.…...

MySQL 全量 增量备份与恢复

目录 前言 一、MySQL 数据库备份概述 1. 数据备份的重要性 2. 数据库备份类型 2.1 从物理与逻辑的角度分类 2.2 从数据库的备份策略角度分类 3. 常见的备份方法 二、数据库完全备份操作 1. 物理冷备份与恢复 1.1 备份数据库 1.2 恢复数据库 2. mysqldump 备份与恢复…...

【仿生机器人系统设计】涉及到的伦理与安全问题

随着材料科学、人工智能与生物工程学的融合突破&#xff0c;仿生机器人正从科幻走向现实。它们被寄予厚望——在医疗康复、老年照护、极端环境作业甚至社交陪伴等领域释放巨大价值。然而&#xff0c;当机器无限趋近于“生命体”&#xff0c;其设计过程中潜伏的伦理与安全迷宫便…...

NodeJS全栈WEB3面试题——P5全栈集成与 DApp 构建

5.1 如何实现一个完整的 Web3 登录流程&#xff08;前端 后端&#xff09;&#xff1f; ✅ 核心机制&#xff1a;钱包签名 后端验签 Web3 登录是基于“消息签名”来验证用户链上身份&#xff0c;而非传统用户名/密码。 &#x1f4bb; 前端&#xff08;使用 MetaMask&#…...

鸿蒙进阶——Mindspore Lite AI框架源码解读之模型加载详解(一)

文章大纲 引言一、模型加载概述二、核心数据结构三、模型加载核心流程 引言 Mindspore 是一款华为开发开源的AI推理框架&#xff0c;而Mindspore Lite则是华为为了适配在移动终端设备上运行专门定制的版本&#xff0c;使得我们可以在OpenHarmony快速实现模型加载和推理等功能&…...

【数据结构】图论核心算法解析:深度优先搜索(DFS)的纵深遍历与生成树实战指南​

深度优先搜索 导读&#xff1a;从广度到深度&#xff0c;探索图的遍历奥秘一、深度优先搜索二、算法思路三、算法逻辑四、算法评价五、深度优先生成树六、有向图与无向图结语&#xff1a;深潜与回溯&#xff0c;揭开图论世界的另一面 导读&#xff1a;从广度到深度&#xff0c;…...

Mysql数据库 索引,事务

Mysql数据库 索引&#xff0c;事务 一.索引 简介 索引是数据库中用于提高查询效率的一种数据结构&#xff0c;它通过预先排序和存储特定列的值&#xff0c;帮助数据库快速定位符合条件的数据行&#xff0c;避免全表扫描。以下是关于索引的核心简介&#xff1a; 1. 核心作用…...

RESTful APInahamcon Fuzzies-write-up

RESTful API 路径详解 RESTful API&#xff08;Representational State Transfer&#xff09;是一种 基于 HTTP 协议的 API 设计风格&#xff0c;它通过 URL 路径 和 HTTP 方法&#xff08;GET、POST、PUT、DELETE 等&#xff09;来定义资源的访问方式。它的核心思想是 将数据…...

安装DockerDocker-Compose

Docker 1、换掉关键文件 vim /etc/yum.repos.d/CentOS-Base.repo ▽ [base] nameCentOS-$releasever - Base - Mirrors Aliyun baseurlhttp://mirrors.aliyun.com/centos/$releasever/os/$basearch/ gpgcheck1 enabled1 gpgkeyhttp://mirrors.aliyun.com/centos/RPM-GPG-KEY-C…...

2025年机械化设计制造与计算机工程国际会议(MDMCE 2025)

2025年机械化设计制造与计算机工程国际会议&#xff08;MDMCE 2025&#xff09; 2025 International Conference on Mechanized Design, Manufacturing, and Computer Engineering 一、大会信息 会议简称&#xff1a;MDMCE 2025 大会地点&#xff1a;中国贵阳 审稿通知&#…...

Java生态中的NLP框架

Java生态系统中提供了多个强大的自然语言处理(NLP)框架&#xff0c;以下是主要的NLP框架及其详细说明&#xff1a; 1、Apache OpenNLP ​简介​&#xff1a;Apache OpenNLP是Apache软件基金会的开源项目&#xff0c;提供了一系列常用的NLP工具。 ​主要功能​&#xff1a; …...

NVM,Node.Js 管理工具

node_mirror: https://npmmirror.com/mirrors/node/ npm_mirror: https://npmmirror.com/mirrors/npm/ 一、什么是 NVM&#xff1f; NVM 是一个命令行工具&#xff0c;允许你在同一台机器上安装、切换和管理多个 Node.js 版本&#xff0c;解决项目间版本冲突问题。 二、安装 …...

Jmeter逻辑控制器、定时器

目录 一、Jmeter逻辑控制器 ①IF(如果)控制器 作用&#xff1a; 位置&#xff1a; 参数介绍&#xff1a; 步骤&#xff1a; ②循环控制器 作用&#xff1a; 位置&#xff1a; 步骤&#xff1a; 线程组属性VS循环控制器 ③ForEach控制器 作用&#xff1a; 位置&am…...

每日八股文6.2

每日八股-6.2 Go1.GMP调度原理&#xff08;这部分多去看看golang三关加深理解&#xff09;2.GC&#xff08;同样多去看看golang三关加深理解&#xff09;3.闭包4.go语言函数是一等公民是什么意思5.sync.Mutex和sync.RWMutex6.sync.WaitGroup7.sync.Cond8.sync.Pool9.panic和rec…...

R3GAN利用配置好的Pytorch训练自己的数据集

简介 简介:这篇论文挑战了"GANs难以训练"的广泛观点,通过提出一个更稳定的损失函数和现代化的网络架构,构建了一个简洁而高效的GAN基线模型R3GAN。作者证明了通过合适的理论基础和架构设计,GANs可以稳定训练并达到优异性能。 论文题目:The GAN is dead; long l…...

吴恩达机器学习笔记(1)—引言

目录 一、欢迎 二、机器学习是什么 三、监督学习 四、无监督学习 一、欢迎 机器学习是当前信息技术领域中最令人兴奋的方向之一。在这门课程中&#xff0c;你不仅会学习机器学习的前沿知识&#xff0c;还将亲手实现相关算法&#xff0c;从而深入理解其内部机理。 事实上&…...

信贷风控规则策略累计增益lift测算

在大数据风控业务实践过程中&#xff0c;目前业内主要还是采用规则叠加的办法做策略&#xff0c;但是会遇到一些问题&#xff1a; 1.我们有10条规则&#xff0c;我上了前7条后&#xff0c;后面3条的绝对风险增益是多少&#xff1f; 2.我的规则之间应该做排序吗&#xff0c;最重…...

【笔记】Windows 部署 Suna 开源项目完整流程记录

#工作记录 因篇幅有限&#xff0c;所有涉及处理步骤的详细处理办法请参考文末资料。 Microsoft Windows [Version 10.0.27868.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗…...

【Elasticsearch】Elasticsearch 核心技术(一):索引

Elasticsearch 核心技术&#xff08;一&#xff09;&#xff1a;索引 1.索引的定义2.索引的命名规范3.索引的增、删、改、查3.1 创建索引3.1.1 创建空索引 3.2 删除索引3.3 文档操作3.3.1 添加/更新文档&#xff08;指定ID&#xff09;3.3.2 添加文档&#xff08;自动生成ID&am…...