【Qwt 7.0 系列】高级科学图表 —— 光谱图、向量场、K线图与极坐标绘图

【Qwt 7.0 系列】高级科学图表 ------ 光谱图、向量场、K线图与极坐标绘图

本文是 Qwt 7.0 系列介绍和教程,如果你正在寻找一个高性能、协议友好、同时支持 2D 和 3D 绘图的 Qt 数据可视化库,那么这篇文章就是为你准备的。

系列总述文章:Qwt 7.0 ------ 基于 Qt 的高性能 2D/3D 绘图库

概述 | 高性能曲线绘制 | 常用图表类型 | 高级科学图表 | 多坐标轴与布局 | 交互功能 | 3D 数据可视化 | 坐标轴与刻度 | 控件与辅助元素 | 总体架构解析 | matplotlib 风格绘图

项目地址:GitHub | Gitee | 在线文档


一、引言

如果说前 3 篇文章覆盖的是"通用图表",那么本篇要介绍的图表类型则更偏"专业领域"。你在做以下事情时,很可能需要它们:

  • 温度场、压力场、电磁场的可视化 → 光谱图
  • 流场、风速场、电场方向的展示 → 向量场图
  • 股票/期货/外汇的行情分析 → K线图
  • 实验数据误差棒、置信区间 → 区间曲线
  • 雷达、天线辐射图、天文观测 → 极坐标绘图

Qwt 7.0 在这些专业图表上做了大量现代化改进,其中最值得关注的是两个 7.0 新增功能:QwtGridRasterData (网格栅格数据,支持双三次插值)和 QwtColorMapPreset(22 种科学 colormap 预设,直接对标 matplotlib)。

下面我们逐一讲解每种图表的实现方法。


二、光谱图 QwtPlotSpectrogram

2.1 什么是光谱图

光谱图(也叫热力图)将三维数据 (x, y, value) 映射到二维平面,用颜色来编码第三维的数值大小。它是科学数据可视化中最常用的图表类型之一。

典型的应用场景包括:

场景 说明
温度场 不同位置的温度分布
压力场 流体/气体的压力分布
频谱分析 信号在时频域的能量分布
地形高程 海拔高度的彩色渲染
医学影像 CT/MRI 数据的伪彩色显示

2.2 基本使用

光谱图的核心是三个组件的配合:数据(QwtRasterData)+ 颜色映射(QwtColorMap)+ 绘图项(QwtPlotSpectrogram)

cpp 复制代码
#include <QwtPlot>
#include <QwtPlotSpectrogram>
#include <QwtRasterData>
#include <QwtColorMap>

// 1. 自定义栅格数据类 ------ 提供 (x, y) 位置的值
class SpectrogramData : public QwtRasterData
{
public:
    SpectrogramData()
    {
        // 设置 X、Y、Z 三个轴的数据范围
        setInterval(Qt::XAxis, QwtInterval(-1.5, 1.5));
        setInterval(Qt::YAxis, QwtInterval(-1.5, 1.5));
        setInterval(Qt::ZAxis, QwtInterval(0.0, 10.0));  // 值范围
    }

    // 核心方法:返回指定位置的值
    virtual double value(double x, double y) const override
    {
        const double c = 0.842;
        const double v1 = x * x + (y - c) * (y + c);
        const double v2 = x * (y + c) + x * (y + c);
        return 1.0 / (v1 * v1 + v2 * v2);
    }
};

// 2. 创建绘图
QwtPlot* plot = new QwtPlot();
plot->setTitle("光谱图示例");

// 3. 创建光谱图绘图项
QwtPlotSpectrogram* spectrogram = new QwtPlotSpectrogram();

// 启用图像显示模式
spectrogram->setDisplayMode(QwtPlotSpectrogram::ImageMode, true);

// 设置颜色映射(7.0 推荐使用预设,见下文)
spectrogram->setColorMap(QwtColorMapPreset::create("viridis").release());

// 设置数据
spectrogram->setData(new SpectrogramData());

// 多线程渲染,提升大数据量下的渲染速度
spectrogram->setRenderThreadCount(0);  // 0 = 使用系统默认线程数

spectrogram->attach(plot);
plot->replot();

2.3 Qwt 7.0 新增:QwtGridRasterData

在 Qwt 6.x 中,如果要将已有的网格矩阵数据喂给光谱图,通常使用 QwtMatrixRasterData。但它只支持最近邻和双线性插值,且数据组织方式不太灵活。

Qwt 7.0 新增了 QwtGridRasterData,它直接接收独立的 X 轴向量、Y 轴向量和二维值矩阵,并支持双三次插值(BicubicInterpolation),渲染效果更加平滑:

cpp 复制代码
#include <QwtGridRasterData>

// 创建网格栅格数据(7.0 新增)
QwtGridRasterData* gridData = new QwtGridRasterData();

// X 轴坐标
QVector<double> xCoords;
for (int i = 0; i < 100; ++i)
    xCoords << (i / 99.0) * 10.0;

// Y 轴坐标
QVector<double> yCoords;
for (int i = 0; i < 80; ++i)
    yCoords << (i / 79.0) * 8.0;

// 二维值矩阵
QVector<QVector<double>> values;
for (int j = 0; j < yCoords.size(); ++j) {
    QVector<double> row;
    for (int i = 0; i < xCoords.size(); ++i) {
        double dx = xCoords[i] - 5.0;
        double dy = yCoords[j] - 4.0;
        row << std::sin(dx) * std::cos(dy);  // 示例函数
    }
    values << row;
}

// 一次性设置坐标和数据
gridData->setValue(xCoords, yCoords, values);

// 7.0 新增:双三次插值,渲染更平滑
gridData->setResampleMode(QwtGridRasterData::BicubicInterpolation);

spectrogram->setData(gridData);

QwtGridRasterData 支持三种重采样模式:

模式 枚举值 说明
最近邻 NearestNeighbour 速度快,有锯齿
双线性插值 BilinearInterpolation 平滑过渡,效果适中
双三次插值 BicubicInterpolation 7.0 新增,最平滑

2.4 Qwt 7.0 新增:22 种科学 colormap 预设

颜色映射是光谱图的灵魂。选对 colormap,数据的结构才能清晰呈现。Qwt 7.0 新增了 QwtColorMapPreset 类,内置了 22 种在科学计算领域广泛使用的 colormap 预设,直接对标 matplotlib 和 MATLAB:

cpp 复制代码
#include <QwtColorMapPreset>

// 通过名称创建(大小写不敏感)
auto colorMap = QwtColorMapPreset::create("plasma");
spectrogram->setColorMap(colorMap.release());

// 或通过枚举创建
auto cmap = QwtColorMapPreset::create(QwtColorMapPreset::Viridis);
spectrogram->setColorMap(cmap.release());

完整的 22 种预设一览:

预设名称 枚举值 特点
viridis Viridis 感知均匀,紫绿黄,matplotlib 默认
plasma Plasma 感知均匀,紫橙黄
inferno Inferno 感知均匀,黑红橙黄
magma Magma 感知均匀,黑紫橙黄
cividis Cividis 感知均匀,蓝灰黄,色盲友好
jet Jet 蓝青绿黄红,MATLAB 经典
hot Hot 黑红黄白
cool Cool 青到品红
spring / summer / autumn / winter --- 季节系列
gray / bone / copper --- 灰度系列
rainbow / hsv / turbo --- 彩虹系列
coolwarm CoolWarm 蓝白红,发散型
rdylbu / rdylgn / spectral --- 发散型多色

小贴士 :如果你的数据是连续型(如温度、高度),推荐使用 viridisplasma 等感知均匀的 colormap;如果是发散型数据(如偏差、相关系数),推荐 coolwarmspectral

当然,你仍然可以像 6.x 那样手动构建 QwtLinearColorMap

cpp 复制代码
// 手动创建线性颜色映射
auto* colorMap = new QwtLinearColorMap(Qt::darkCyan, Qt::red);
colorMap->addColorStop(0.1, Qt::cyan);
colorMap->addColorStop(0.6, Qt::green);
colorMap->addColorStop(0.95, Qt::yellow);
spectrogram->setColorMap(colorMap);

2.5 等高线模式

除了颜色填充,光谱图还支持等高线显示。两种模式可以同时开启,效果类似地形图叠加等高线:

cpp 复制代码
// 同时启用图像模式和等高线模式
spectrogram->setDisplayMode(QwtPlotSpectrogram::ImageMode, true);
spectrogram->setDisplayMode(QwtPlotSpectrogram::ContourMode, true);

// 设置等高线级别
QList<double> contourLevels;
for (double level = 0.5; level < 10.0; level += 1.0)
    contourLevels += level;
spectrogram->setContourLevels(contourLevels);

// 设置等高线画笔
spectrogram->setDefaultContourPen(QPen(Qt::black, 0));

2.6 颜色条(Color Bar)

在坐标轴旁添加颜色条,让读者知道颜色对应的数值范围:

cpp 复制代码
#include <QwtScaleWidget>

// 在右侧坐标轴添加颜色条
QwtScaleWidget* rightAxis = plot->axisWidget(QwtAxis::YRight);
rightAxis->setTitle("Intensity");
rightAxis->setColorBarEnabled(true);
rightAxis->setColorBarWidth(20);

// 设置颜色条的范围和颜色映射
const QwtInterval zInterval = spectrogram->data()->interval(Qt::ZAxis);
rightAxis->setColorMap(zInterval, QwtColorMapPreset::create("viridis").release());

plot->setAxisScale(QwtAxis::YRight, zInterval.minValue(), zInterval.maxValue());
plot->setAxisVisible(QwtAxis::YRight, true);

三、向量场图 QwtPlotVectorField

3.1 什么是向量场

向量场用于在二维平面上显示带方向和大小的向量数据。每个数据点不是一个标量值,而是一个箭头------箭头方向表示向量方向,箭头长度(或颜色)表示向量大小。

典型应用:流体力学中的流速场、电磁学中的电场/磁场、气象学中的风向场。

3.2 基本使用

向量场的数据结构是 QwtVectorFieldSample,包含位置 (x, y) 和向量分量 (vx, vy)

cpp 复制代码
#include <QwtPlot>
#include <QwtPlotVectorField>

QwtPlot* plot = new QwtPlot();
plot->setTitle("向量场示例");

QwtPlotVectorField* vectorField = new QwtPlotVectorField();

// 准备向量数据
QVector<QwtVectorFieldSample> samples;
for (int x = 0; x < 10; x++) {
    for (int y = 0; y < 10; y++) {
        double vx = std::sin(y * 0.5);  // X 方向分量
        double vy = std::cos(x * 0.5);  // Y 方向分量
        samples << QwtVectorFieldSample(x, y, vx, vy);
    }
}
vectorField->setSamples(samples);

vectorField->attach(plot);
plot->replot();

3.3 样式定制

可以控制箭头的缩放比例、颜色映射以及显示密度:

cpp 复制代码
#include <QwtVectorFieldSymbol>

// 创建箭头符号
auto* symbol = new QwtVectorFieldSymbol();
symbol->setStyle(QwtVectorFieldSymbol::Arrow);
symbol->setPen(QPen(Qt::blue, 1));
vectorField->setSymbol(symbol);

// 设置向量长度的缩放因子
vectorField->setMagnitudeScaleFactor(0.5);  // 箭头长度 = 实际大小 × 0.5

// 控制显示密度,避免箭头过于拥挤
vectorField->setSamplesPerInch(20);  // 每英寸显示 20 个向量

// 根据向量大小设置颜色(从小到大:蓝→红)
QwtLinearColorMap* colorMap = new QwtLinearColorMap(Qt::blue, Qt::red);
vectorField->setColorMap(colorMap);
vectorField->setColorMagnitude(true);  // 启用颜色映射
方法 说明
setSamples() 设置向量数据
setSymbol() 设置箭头符号样式
setMagnitudeScaleFactor() 箭头长度的缩放因子
setSamplesPerInch() 控制显示密度
setColorMap() 设置颜色映射
setColorMagnitude() 启用按大小着色

四、K线图 QwtPlotTradingCurve

4.1 什么是K线图

K线图(蜡烛图)是金融领域最经典的图表类型。每根K线包含四个价格数据:开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close),简称 OHLC。

Qwt 提供了专门的 QwtPlotTradingCurve 类来绘制K线图,支持蜡烛图和美国线两种样式,并能自动区分涨跌颜色。

4.2 数据结构

每根K线的数据由 QwtTradingSample 表示:

cpp 复制代码
struct QwtTradingSample {
    double time;   // 时间点(X 轴位置)
    double open;   // 开盘价
    double close;  // 收盘价
    double high;   // 最高价
    double low;    // 最低价
};

4.3 基本K线图

cpp 复制代码
#include <QwtPlot>
#include <QwtPlotTradingCurve>

QwtPlot* plot = new QwtPlot();
plot->setTitle("股票K线图");

QwtPlotTradingCurve* curve = new QwtPlotTradingCurve("日K线");

// 设置为蜡烛图样式
curve->setStyle(QwtPlotTradingCurve::CandleStick);

// 设置涨跌颜色(中国市场惯例:红涨绿跌)
curve->setSymbolBrush(QwtPlotTradingCurve::Positive,
    QBrush(Qt::red));     // 涨:红色实心
curve->setSymbolBrush(QwtPlotTradingCurve::Negative,
    QBrush(Qt::green));   // 跌:绿色实心

// 箱体宽度(相对坐标单位)
curve->setSymbolExtent(0.8);  // 占 80% 宽度

// 准备K线数据
QVector<QwtTradingSample> samples;
samples << QwtTradingSample(1, 10.0, 10.5, 11.0, 9.5);   // 第1天,涨
samples << QwtTradingSample(2, 10.5, 10.2, 10.8, 10.0);  // 第2天,跌
samples << QwtTradingSample(3, 10.2, 10.8, 11.2, 10.1);  // 第3天,涨
samples << QwtTradingSample(4, 10.8, 10.6, 11.0, 10.4);  // 第4天,跌

curve->setSamples(samples);
curve->attach(plot);

plot->setAxisScale(QwtAxis::YLeft, 9, 12);
plot->replot();

4.4 涨跌状态与颜色约定

QwtPlotTradingCurve 会自动根据开盘价和收盘价的关系判断涨跌:

状态 枚举值 判断条件
上涨 Positive close > open
下跌 Negative close < open
平盘 Neutral close == open

颜色约定因市场而异:中国市场习惯红涨绿跌 ,国际市场习惯绿涨红跌 。通过 setSymbolBrush()setSymbolPen() 可以分别设置填充色和边框色:

cpp 复制代码
// 涨:红色填充 + 深红边框
curve->setSymbolBrush(QwtPlotTradingCurve::Positive, QBrush(Qt::red));
curve->setSymbolPen(QwtPlotTradingCurve::Positive, QPen(Qt::darkRed, 1));

// 跌:绿色填充 + 深绿边框
curve->setSymbolBrush(QwtPlotTradingCurve::Negative, QBrush(Qt::green));
curve->setSymbolPen(QwtPlotTradingCurve::Negative, QPen(Qt::darkGreen, 1));

// 平盘:灰色
curve->setSymbolBrush(QwtPlotTradingCurve::Neutral, QBrush(Qt::gray));
curve->setSymbolPen(QwtPlotTradingCurve::Neutral, QPen(Qt::black, 1));

4.5 配合均线和成交量

K线图通常会叠加移动平均线(MA)和成交量柱状图,形成完整的行情分析视图:

cpp 复制代码
#include <QwtPlotCurve>
#include <QwtPlotBarChart>

// 5日均线
QwtPlotCurve* ma5 = new QwtPlotCurve("MA5");
ma5->setPen(QPen(Qt::blue, 1));
ma5->setSamples(ma5Data);
ma5->attach(plot);

// 成交量柱状图
QwtPlotBarChart* volumeChart = new QwtPlotBarChart("成交量");
volumeChart->setSamples(volumes);
volumeChart->setBrush(QBrush(Qt::gray));
volumeChart->attach(plot);

五、区间曲线 QwtPlotIntervalCurve

5.1 什么是区间曲线

区间曲线用于绘制带有上下限范围的数据。与普通曲线只显示一个确定值不同,区间曲线的每个数据点包含一个中值和一个 [min, max] 区间。它常用于:

  • 实验数据的误差棒
  • 统计分析的置信区间
  • 预测模型的预测区间
  • 时间序列的波动范围

5.2 基本使用

区间曲线的数据结构是 QwtIntervalSample

cpp 复制代码
struct QwtIntervalSample {
    double value;          // 中值(曲线位置)
    QwtInterval interval;  // 区间范围 [min, max]
};
cpp 复制代码
#include <QwtPlot>
#include <QwtPlotIntervalCurve>
#include <QwtInterval>

QwtPlot* plot = new QwtPlot();
plot->setTitle("区间曲线示例");

QwtPlotIntervalCurve* curve = new QwtPlotIntervalCurve("误差范围");

// Tube 样式:绘制填充的区间区域
curve->setStyle(QwtPlotIntervalCurve::Tube);

// 中值曲线样式
curve->setPen(QPen(Qt::blue, 2));

// 区间填充样式(半透明蓝色)
curve->setBrush(QBrush(QColor(100, 150, 200, 100)));

// 准备数据
QVector<QwtIntervalSample> samples;
samples << QwtIntervalSample(5.0, QwtInterval(4.0, 6.0));
samples << QwtIntervalSample(8.0, QwtInterval(6.5, 9.5));
samples << QwtIntervalSample(10.0, QwtInterval(8.0, 12.0));
samples << QwtIntervalSample(12.0, QwtInterval(10.0, 14.0));

curve->setSamples(samples);
curve->attach(plot);
plot->replot();

5.3 误差棒样式

除了 Tube 填充样式,还可以使用 ErrorBars 样式绘制标准的误差棒:

cpp 复制代码
#include <QwtIntervalSymbol>

curve->setStyle(QwtPlotIntervalCurve::ErrorBars);
curve->setPen(QPen(Qt::black, 1));

// 创建误差棒符号
auto* symbol = new QwtIntervalSymbol(QwtIntervalSymbol::Bar);
symbol->setPen(QPen(Qt::black, 1));
symbol->setWidth(8);  // 误差棒横线宽度(像素)
curve->setSymbol(symbol);

区间曲线支持三种样式:

样式 枚举值 说明
无曲线 NoCurve 仅显示区间填充或符号
管状填充 Tube 绘制上下边界之间的填充区域
误差棒 ErrorBars 绘制带横线的误差棒线条

六、极坐标绘图 QwtPolarPlot

6.1 什么是极坐标绘图

前面所有的图表都基于笛卡尔坐标系(X-Y 直角坐标)。但在某些领域,数据天然适合用极坐标表示------用角度半径 来定位。QwtPolarPlot 就是 Qwt 提供的极坐标绘图控件。

典型应用:雷达扫描图、天线辐射方向图、天文星图、方向分布统计。

6.2 基本使用

cpp 复制代码
#include <QwtPolarPlot>
#include <QwtPolarGrid>
#include <QwtPolarCurve>

// 创建极坐标绘图
QwtPolarPlot* polarPlot = new QwtPolarPlot();
polarPlot->setTitle("极坐标图示例");

// 设置角度范围(0-360度)
polarPlot->setScale(QwtPolar::Azimuth, 0.0, 360.0);

// 设置半径范围
polarPlot->setScale(QwtPolar::Radius, 0.0, 100.0);

// 创建极坐标网格(同心圆 + 角度射线)
QwtPolarGrid* grid = new QwtPolarGrid();
grid->showGrid(QwtPolarGrid::Azimuth, true);   // 角度网格线(射线)
grid->showGrid(QwtPolarGrid::Radius, true);    // 半径网格线(同心圆)
grid->setPen(QPen(Qt::gray, 0.5));
grid->attach(polarPlot);

// 创建极坐标曲线
QwtPolarCurve* curve = new QwtPolarCurve("曲线数据");

// 准备数据(角度,半径)
QVector<QwtPointPolar> samples;
for (int angle = 0; angle < 360; angle += 10) {
    double radius = 50 + 30 * std::sin(angle * 3.0 * M_PI / 180.0);
    samples << QwtPointPolar(angle, radius);
}
curve->setSamples(samples);
curve->setPen(QPen(Qt::blue, 2));
curve->attach(polarPlot);

polarPlot->replot();

极坐标的数据点使用 QwtPointPolar,包含角度和半径两个分量。它还可以从笛卡尔坐标自动转换:

cpp 复制代码
// 从笛卡尔坐标构造极坐标点
QwtPointPolar polar(QPointF(3.0, 4.0));  // 自动计算:角度 ≈ 53.13°,半径 = 5

6.3 极坐标光谱图

Qwt 还支持在极坐标系下绘制光谱图,非常适合雷达数据显示:

极坐标光谱图将常规的矩形光谱图"弯曲"到圆形区域中,角度对应方位角,半径对应距离,颜色对应信号强度。这在雷达、声纳等领域极为常用。

6.4 极坐标标记

和普通坐标系一样,极坐标系也支持标记点:

cpp 复制代码
#include <QwtPolarMarker>

QwtPolarMarker* marker = new QwtPolarMarker();
marker->setPosition(QwtPointPolar(90.0, 80.0));  // 角度90°,半径80

// 标记符号
QwtSymbol* symbol = new QwtSymbol(QwtSymbol::Cross,
    Qt::NoBrush, QPen(Qt::red, 2), QSize(10, 10));
marker->setSymbol(symbol);

// 标记标签
QwtText label("关键点");
label.setColor(Qt::red);
marker->setLabel(label);
marker->setLabelAlignment(Qt::AlignCenter);
marker->attach(polarPlot);

6.5 极坐标核心方法

方法 说明
setScale() 设置坐标轴范围
setScaleMaxMajor() 设置主刻度数量
setScaleMaxMinor() 设置次刻度数量
setScaleEngine() 设置刻度引擎(支持对数刻度)
replot() 刷新绘图

七、与旧版本(Qwt 6.x)的区别

如果你从 Qwt 6.x 迁移过来,本篇涉及的图表有以下几个重要变化:

7.1 QwtGridRasterData(7.0 新增)

这是 7.0 全新增加的栅格数据类。与 6.x 的 QwtMatrixRasterData 相比:

特性 QwtMatrixRasterData (6.x) QwtGridRasterData (7.0 新增)
数据组织 扁平一维数组 + 宽度 独立的 X/Y 向量 + 二维矩阵
最近邻插值 支持 支持
双线性插值 支持 支持
双三次插值 不支持 支持(渲染更平滑)
像素提示 基础 优化

如果你的数据本身就是网格形式的(X 坐标数组、Y 坐标数组、二维值矩阵),使用 QwtGridRasterData 更加自然,无需手动展平为一维数组。

7.2 QwtColorMapPreset(7.0 新增)

在 6.x 中,要使用类似 matplotlib 的科学 colormap,需要手动查找颜色停止点并逐个添加到 QwtLinearColorMap,非常繁琐。7.0 的 QwtColorMapPreset 内置了 22 种预设,一行代码即可创建:

cpp 复制代码
// 6.x 的方式:手动添加颜色停止点
auto* cmap = new QwtLinearColorMap(
    QColor(68, 1, 84), QColor(253, 231, 37));
cmap->addColorStop(0.125, QColor(72, 36, 117));
cmap->addColorStop(0.250, QColor(64, 67, 135));
// ... 还有很多行

// 7.0 的方式:一行搞定
auto cmap = QwtColorMapPreset::create("viridis");

7.3 坐标轴 API

7.0 使用 QwtAxis::YRightQwtAxis::YLeft 等新枚举替代了 6.x 的 QwtPlot::yRight。旧枚举通过兼容宏仍可使用,但新代码建议使用新枚举。


八、总结与下期预告

本篇介绍了 Qwt 7.0 中 5 种高级科学图表的实现方法:

图表类型 核心类 典型应用
光谱图 QwtPlotSpectrogram 温度场、压力场、频谱分析
向量场 QwtPlotVectorField 流场、电磁场、风向场
K线图 QwtPlotTradingCurve 股票/期货/外汇行情
区间曲线 QwtPlotIntervalCurve 误差棒、置信区间
极坐标 QwtPolarPlot 雷达、天线方向图、天文数据

其中两个 7.0 新功能值得特别关注:

  • QwtGridRasterData:支持双三次插值的网格栅格数据类,让光谱图渲染更平滑
  • QwtColorMapPreset:22 种科学 colormap 预设,一行代码对标 matplotlib 的配色方案

这些功能让 Qwt 7.0 在科学可视化领域的易用性和专业性都上了一个台阶。

系列文章

系列总述:Qwt 7.0 ------ 基于 Qt 的高性能 2D/3D 绘图库


相关链接

相关推荐
不想学习!!1 小时前
Qt Quick 常用控件入门:Window、Button、CheckBox 与 RadioButton
qt·qml
qq_4017004113 小时前
Qt QSS 完全入门写出漂亮界面以及解决样式不生效问题
开发语言·qt
旖-旎14 小时前
QT系统篇(5)(下)
开发语言·c++·qt
Irissgwe14 小时前
第四章 QT窗口
qt
郝学胜_神的一滴16 小时前
Qt 高级编程 034:深耕QWidget底层内核—彻底吃透无边框窗口设计核心原理
c++·qt
澈20717 小时前
【无标题】QT入门第十二天:数据库编程(下)模型视图与数据展示 | 零基础学QT
数据库·qt·oracle
luoyayun36120 小时前
Qt/QML音视频文件原始十六进制查看器
qt·音视频·十六进制查看
小c君tt20 小时前
QT笔记记录
开发语言·笔记·qt
澈2071 天前
QT入门第十一天:数据库编程(上)SQLite入门与增删改查 | 零基础学QT
数据库·qt·sqlite