2.Qt-基础核心以及信号与槽

字符串处理:QString

常用功能:格式化字符串、数字转换、拼接、分割。

c 复制代码
QString name = "Qt";
int version = 6;

// 1. 格式化输出
QString status = QString("正在学习 %1 的第 %2 个版本").arg(name).arg(version);
// 结果: "正在学习 Qt 的第 6 个版本"

// 2. 数字转换
int num = status.split(" ").last().toInt(); // 提取最后一个词(last)并转为 int(Toint)
容器类:QVector, QList, QMap

QList: Qt 中最通用的列表容器。

QMap: 键值对映射(基于红黑树)。

QHash: 哈希表(查找速度比 QMap 快,但无序)。

c 复制代码
QList<QString> list;
list << "Apple" << "Banana"; // 支持流式操作符插入
list.append("Orange");

QMap<QString, int> scores;
//两种赋值方法
scores["Alice"] = 100;
scores.insert("Bob", 90);
调试:qDebug()

它会自动处理空格、自动换行,并且能直接打印 Qt 的对象。

c 复制代码
#include <QDebug>
//流式输出
qDebug() << "用户列表:" << list; // 直接打印整个列表,无需写循环
// 输出: 用户列表: ("Apple", "Banana", "Orange")
信号与槽 (Signals & Slots)
html 复制代码
信号 (Signal): 当对象内部状态发生改变,或者发生了某件事(比如按钮被点击、数据下载完成)时,它会发出(emit)一个信号。
槽 (Slot): 这是一个普通的成员函数。当它连接的信号被发射时,这个槽函数会被自动调用,用来处理响应逻辑。
连接 (Connect): 将信号和槽绑定在一起的桥梁。

任何使用信号与槽的类,必须在类声明的私有部分(private)添加 Q_OBJECT 宏。这会告诉 Qt 的元对象编译器(MOC)为这个类生成额外的代码。

  1. 定义信号
c 复制代码
signals:
    void dataReady(const QString &data); // 只需要声明,不要写实现
  1. 定义槽
c 复制代码
public slots:
    void processData(const QString &data) {
        qDebug() << "接收到数据:" << data;
    }
  1. 连接 (connect)
c 复制代码
QObject::connect(senderObj, &SenderClass::signalName, 
                 receiverObj, &ReceiverClass::slotName);
示例

创建时候选Qt Console Application (Qt 控制台应用程序)。

c 复制代码
#include <QCoreApplication>
#include <QObject>
#include <QDebug>
#include <QString>

// --- 1. 定义发送者类:指挥官 ---
class Commander : public QObject {
    Q_OBJECT // 必须加这个宏,启用信号槽机制

    public:
        Commander() {}

        // 模拟下达命令的函数
        void orderAttack(const QString &target) {
            qDebug() << "指挥官: 收到请回复" << target;
            // 发射信号,面向对象编程要我们类内或者公共函数内触发
            emit attackSignal(target);
        }

    signals:
        // 信号声明:不需要写函数体,只负责传参
        void attackSignal(const QString &target);
};

// --- 2. 定义接收者类:士兵 ---
class Soldier : public QObject {
    Q_OBJECT

    public:
        //给私有属性赋值
        Soldier(QString name) : m_name(name) {}

    public slots:
        // 槽函数:接收信号后的处理逻辑
        void onAttackOrdered(const QString &target) {
            qDebug() << "特种兵" << m_name << "over!" << target;
        }

    private:
        QString m_name;
};

// --- 3. 主程序 ---
int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);

    // 实例化对象
    Commander boss;
    Soldier s1("瑞恩");
    Soldier s2("阿甘");

    // 建立连接:长官-> 士兵
    QObject::connect(&boss, &Commander::attackSignal,
                     &s1, &Soldier::onAttackOrdered);

    QObject::connect(&boss, &Commander::attackSignal,
                     &s2, &Soldier::onAttackOrdered);

    qDebug() << "--- 战斗准备就绪 ---";

    // 触发事件
    boss.orderAttack("yesir");


    // return 0; 结束。
    // 在真实控制台程序中通常使用 return a.exec(); 进入事件循环。
    return 0;
}

// 单文件示例(类写在cpp里),必须加
// 它的作用是包含 Qt 自动生成的元对象代码。
// 如果你把类分拆成 .h 和 .cpp 文件,就不需要这一行。
#include "main.moc"
相关推荐
代码游侠11 小时前
学习笔记——GPIO按键与中断系统
c语言·开发语言·arm开发·笔记·嵌入式硬件·学习·重构
R-sz11 小时前
app登录接口实现,基于JWT的APP登录认证系统实现方案
java·开发语言·python
努力学习的小廉11 小时前
【QT(九)】—— 窗口
数据库·qt·系统架构
Elieal11 小时前
@Api 系列注解
java·开发语言
Remember_99311 小时前
【数据结构】深入理解Map和Set:从搜索树到哈希表的完整解析
java·开发语言·数据结构·算法·leetcode·哈希算法·散列表
浅念-11 小时前
C++第一课
开发语言·c++·经验分享·笔记·学习·算法
Coding茶水间11 小时前
基于深度学习的路面裂缝检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
开发语言·人工智能·深度学习·yolo·目标检测·机器学习
charlie11451419111 小时前
现代嵌入式C++教程:对象池(Object Pool)模式
开发语言·c++·学习·算法·嵌入式·现代c++·工程实践
火山上的企鹅11 小时前
QGC 中修改原生 Android 串口 BUG 实操
qt·串口·qgc·无人机开发
TTGGGFF11 小时前
控制系统建模仿真(二):掌握控制系统设计的 MAD 流程与 MATLAB 基础运算
开发语言·数据结构·matlab