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

QT核心类:基础类、GUI类、多媒体与图表、网络与数据库

模块核心类功能描述关键方法/特性
QtCoreQObject所有 Qt 类的基类,提供信号槽、属性系统、父子关系管理signalsslotsemitsetProperty()property()metaObject()
QApplicationGUI 应用程序入口,管理事件循环、全局设置、资源加载exec()(启动事件循环)、quit()setQuitOnLastWindowClosed()
QThread多线程支持,允许对象在不同线程中运行start()moveToThread()run()
QStringUnicode 字符串类,支持国际化、正则表达式、格式化操作isEmpty()toInt()replace()sprintf()
QVariant通用数据容器,可存储多种类型(整型、浮点型、指针等)type()value<T>()canConvert<T>()
QTimer定时器类,支持单次/重复触发事件start(int interval)stop()timeout()(槽函数)
QtWidgetsQWidget所有 GUI 组件的基类,负责绘制、事件处理、布局管理resize()show()hide()setLayout()
QPushButton按钮控件,响应点击事件setText()setIcon()setChecked()(复选框)
QVBoxLayout垂直布局管理器,自动排列子控件的垂直位置和大小addWidget()addLayout()setContentsMargins()
QMessageBox标准对话框类,用于显示警告、错误、确认等信息critical()warning()question()about()
QtGuiQPainter图形绘制工具,支持矢量图形和位图渲染drawText()drawRect()fillRect()drawImage()
QColor颜色类,表示 RGB/HSV 颜色值rgb()hsl()name()isValid()
QtNetworkQTcpSocketTCP 套接字类,实现基于 sockets 的网络通信connectToHost()write()readAll()disconnectFromHost()
QNetworkRequestHTTP 请求类,管理 URL、头信息、请求方法等setUrl()setHeader()setMethod()
QtSqlQSqlDatabase数据库连接管理器,支持多种数据库(SQLite、MySQL 等)addDatabase()open()executeQuery()
QSqlTableModel数据模型类,将 SQL 表映射为 GUI 表格控件(如 QTableViewsetTable()select()setData()headerData()
QtMultimediaQMediaPlayer多媒体播放器类,支持音频、视频的播放与控制setMedia()play()pause()stop()volume()
QCamera摄像头捕获类,访问实时视频流startCapture()stopCapture()setResolution()
QtWebKit/QtWebEngineQWebEngineView嵌入式浏览器控件,渲染 HTML/CSS/JavaScript 内容load(QUrl)evaluateJavaScript()page()(获取网页对象)

 

1. 基础核心类

1. QObject

  • 功能:所有 Qt 类的基类,提供信号槽机制、对象树内存管理、事件处理。

  • 核心特性

    • 父子对象:父对象销毁时自动销毁子对象。

    • 信号与槽:通过 connect 实现对象间通信

class MyObject : public QObject {
    Q_OBJECT
signals:
    void valueChanged(int newValue);
public slots:
    void setValue(int value) { emit valueChanged(value); }
};

MyObject obj1, obj2;
QObject::connect(&obj1, &MyObject::valueChanged, &obj2, &MyObject::setValue);

2. QString

  • 功能:Unicode 字符串处理,支持高效操作。

  • 常用方法

    • arg():格式化字符串。

    • toInt()toDouble():类型转换。

QString name = "Alice";
int age = 30;
QString info = QString("Name: %1, Age: %2").arg(name).arg(age); // "Name: Alice, Age: 30"

3. QList<T>

  • 功能:动态数组容器,支持快速插入和遍历。

QList<int> numbers = {1, 2, 3};
numbers.append(4);
for (int num : numbers) {
    qDebug() << num; // 输出 1, 2, 3, 4
}

 4. QVariant

  • 功能:通用数据类型容器,支持存储多种类型。

QVariant data = 42;              // 存储整数
qDebug() << data.toInt();        // 输出 42
data = "Hello";                  // 存储字符串
qDebug() << data.toString();     // 输出 "Hello"

2. 图形界面类

1. QWidget

  • 功能:所有窗口和控件的基类。

  • 示例(创建窗口):

QWidget window;
window.setWindowTitle("My App");
window.resize(400, 300);
window.show();

2. QMainWindow

  • 功能:主窗口框架,集成菜单栏、工具栏等。

QMainWindow mainWindow;
QMenuBar *menuBar = mainWindow.menuBar();
QMenu *fileMenu = menuBar->addMenu("File");
QAction *openAction = fileMenu->addAction("Open");
mainWindow.show();

3. QPushButton 与布局

  • 示例(按钮 + 布局):

QWidget window;
QPushButton *button = new QPushButton("Click Me", &window);
QLabel *label = new QLabel("Status: Ready", &window);

QVBoxLayout *layout = new QVBoxLayout(&window);
layout->addWidget(button);
layout->addWidget(label);

QObject::connect(button, &QPushButton::clicked, [label]() {
    label->setText("Status: Clicked!");
});

3. 信号与槽高级用法

1. 自定义信号与参数

  • 示例

// 包含QObject基类,所有Qt对象都必须继承自QObject
#include <QObject>
// 包含调试输出工具
#include <QDebug>

// Sensor类继承自QObject,使其具备信号槽能力
class Sensor : public QObject {
    Q_OBJECT // 必须包含此宏以启用信号槽机制和元对象系统

public:
    // 构造函数(隐式默认构造函数)
    Sensor(QObject *parent = nullptr) : QObject(parent) {}

signals:
    // 声明温度变化信号,参数为double类型
    void temperatureChanged(double temp); 

public slots:
    // 公共成员函数,用于模拟读取数据
    void readData() { 
        // 发射temperatureChanged信号,传递25.5作为参数
        emit temperatureChanged(25.5); 
    }
};

// Display类继承自QObject,用于显示数据
class Display : public QObject {
    Q_OBJECT 

public:
    // 构造函数(隐式默认构造函数)
    Display(QObject *parent = nullptr) : QObject(parent) {}

public slots:
    // 声明槽函数,接收温度值并输出
    void updateDisplay(double temp) { 
        // 使用qDebug输出调试信息
        qDebug() << "Current temp:" << temp; 
    }
};

// 全局对象声明(此处需注意生命周期管理)
Sensor sensor;  // 默认构造
Display display; // 默认构造

// 主函数入口
int main(int argc, char *argv[]) {
    // 初始化Qt应用程序
    QApplication app(argc, argv);

    // 连接信号与槽
    QObject::connect(&sensor, &Sensor::temperatureChanged, 
                     &display, &Display::updateDisplay);

    // 触发传感器数据读取
    sensor.readData(); // 输出 "Current temp: 25.5"

    return app.exec();
}

2. 跨线程通信

  • 示例(使用 QThread):

class Worker : public QObject {
    Q_OBJECT
public slots:
    void doWork() {
        // 耗时操作
        emit resultReady("Done");
    }
signals:
    void resultReady(const QString &result);
};

QThread thread;
Worker worker;
worker.moveToThread(&thread);

QObject::connect(&thread, &QThread::started, &worker, &Worker::doWork);
QObject::connect(&worker, &Worker::resultReady, [](const QString &result) {
    qDebug() << "Result:" << result;
    QCoreApplication::quit();
});

thread.start();

4. 网络与数据库

1. QNetworkAccessManager

  • 示例(HTTP GET 请求):

QNetworkAccessManager manager;
QObject::connect(&manager, &QNetworkAccessManager::finished, [](QNetworkReply *reply) {
    if (reply->error() == QNetworkReply::NoError) {
        qDebug() << "Response:" << reply->readAll();
    }
});
manager.get(QNetworkRequest(QUrl("https://api.example.com/data")));

2. QSqlDatabase

  • 示例(SQLite 数据库操作):

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("mydb.sqlite");
if (db.open()) {
    QSqlQuery query;
    query.exec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)");
    query.exec("INSERT INTO users (name) VALUES ('Alice')");
}

5. 多媒体与图表

1. QMediaPlayer

  • 示例(播放音频):

QMediaPlayer player;
QAudioOutput audioOutput;
player.setAudioOutput(&audioOutput);
player.setSource(QUrl::fromLocalFile("music.mp3"));
player.play();

2. QChart

  • 示例(绘制折线图):

QLineSeries *series = new QLineSeries();
series->append(0, 6);
series->append(2, 4);

QChart *chart = new QChart();
chart->addSeries(series);
chart->createDefaultAxes();

QChartView *chartView = new QChartView(chart);
chartView->show();

6. 工具类

1. QFile

  • 示例(文件读写):

QFile file("data.txt");
if (file.open(QIODevice::WriteOnly)) {
    QTextStream stream(&file);
    stream << "Hello, Qt!";
    file.close();
}

2. QTimer

  • 示例(定时任务):

QTimer timer;
QObject::connect(&timer, &QTimer::timeout, []() {
    qDebug() << "Timer triggered!";
});
timer.start(1000); // 每隔 1 秒触发


http://www.kler.cn/a/587577.html

相关文章:

  • 游戏引擎学习第160天
  • 【GPT入门】第21课 langchain核心组件
  • vscode--工作区和相对路径
  • 【Linux内核系列】:文件系统收尾以及软硬链接详解
  • 在windows上通过idea搭建doris fe的开发环境(快速成功版)
  • Redis 数据结构及使用场景介绍
  • Linux练级宝典->动态库和静态库
  • Vue 3 vs Vue 2:深入解析从性能优化到源码层面的进化
  • 深入React Redux:原理剖析与高效实践指南
  • Sequelize:Node.js 项目中数据库管理的 “秘密武器”
  • 洛谷 P2801 教主的魔法 题解
  • Mac 上编译 Ragflow
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(39)玲珑棋局摆硬币 - 零钱兑换(完全背包)
  • python列表基础知识
  • 3.4 Spring Boot整合Elasticsearch:全文检索与聚合分析
  • 信奥赛CSP-J复赛集训(模拟算法专题)(16):P6386 [COCI 2007/2008 #4] VAUVAU
  • Linux下对2TB磁盘的分区、格式化、挂截目录介绍
  • 用Python和Pygame实现打砖块游戏
  • HTML编辑MP4保存名称
  • DBeaver部分操作指南(数据库连接,构造ERD图,格式化SQL)