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"
相关推荐
wuyk5558 小时前
第2章:六步换相原理全解+STM32工程实战
c语言·开发语言·stm32·单片机·嵌入式硬件
hey_sml8 小时前
JAVA每日一学---CompletableFuture中thenApply与thenCompose区别详解
java·开发语言
萧瑟余晖9 小时前
Java深入解析篇十七之SpringCloud
java·开发语言
ttod_qzstudio10 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
我是小灰灰吖11 小时前
QT在线安装器使用指南:从下载到配置完整教程
linux·qt·ubuntu
萧瑟余晖11 小时前
Java深入解析篇十七之Spring Security
java·开发语言·spring
C++ 老炮儿的技术栈13 小时前
从 Qt Designer 属性编辑器的层级可以看到继承链
c语言·数据库·c++·qt·sqlite·visual studio
二十雨辰14 小时前
[Java]-Spring面试题
java·开发语言
_oP_i14 小时前
python 后缀 mjs文件
开发语言·python
萧瑟余晖15 小时前
Java深入解析篇二十二之虚拟线程
java·开发语言