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"
相关推荐
凤凰院凶涛QAQ几秒前
《C++转Java快速入手系列》实践篇:图书系统
java·开发语言·c++
小短腿的代码世界5 分钟前
Qt位置服务深度解析:从GPS定位到地理围栏的完整架构设计
开发语言·qt
Lucky_ldy16 分钟前
C语言学习:数据在内存中的存储
c语言·开发语言·学习
钱多多_qdd20 分钟前
基于mac环境,升级python环境问题解决
开发语言·python·macos
boonya21 分钟前
Python 量化金融框架及技术落地方案
开发语言·python·金融
Ulyanov26 分钟前
《从质点到位姿:基于Python与PyVista的导弹制导控制全栈仿真》: 基石——3-DOF质点弹道的高保真建模与数值稳定性分析
开发语言·python·算法·ui·系统仿真
学习中.........27 分钟前
Java 并发容器深度解析:从早期遗留类到现代高并发架构
java·开发语言·架构
加号329 分钟前
【C#】 实现程序最小化后重新拉起并强制置顶显示的技术指南
开发语言·c#
wangl_9233 分钟前
C# / .NET 在工业环境中的优势
开发语言·c#·.net·.netcore·.net core·visual studio
史迪仔011234 分钟前
[QML] Qt5/6图像色彩空间处理
开发语言·前端·c++·qt