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"
相关推荐
qq_4663024518 小时前
vs2008 Hotlink实时数据读取
c++·qt
代码or搬砖18 小时前
String字符串
android·java·开发语言
leo__52019 小时前
基于两步成像算法的聚束模式SAR MATLAB实现
开发语言·算法·matlab
Macbethad20 小时前
自动化测试技术报告
开发语言·lua
不会画画的画师20 小时前
Go开发指南:io/ioutil包应用和迁移指南
开发语言·后端·golang
2503_9284115620 小时前
12.22 wxml语法
开发语言·前端·javascript
59803541520 小时前
【java工具类】小数、整数转中文大写
android·java·开发语言
JIngJaneIL20 小时前
基于java + vue个人博客系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
吃喝不愁霸王餐APP开发者20 小时前
Java后端服务在对接全国性霸王餐API时的多数据中心部署与就近调用策略
java·开发语言
froginwe1121 小时前
jQuery UI 实例
开发语言