Qt 性能优化 #

界面优化 #

减少重绘 #

cpp
// 批量更新时禁用重绘
widget->setUpdatesEnabled(false);
// 多次更新操作
widget->setUpdatesEnabled(true);

// 使用 update() 而非 repaint()
widget->update();  // 合并重绘请求
// widget->repaint();  // 立即重绘

优化布局 #

cpp
// 延迟布局计算
layout->setEnabled(false);
// 添加多个控件
layout->setEnabled(true);

// 使用最小尺寸提示
widget->setMinimumSize(100, 50);

图片优化 #

cpp
// 缩放图片
QPixmap scaled = pixmap.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation);

// 缓存图片
QPixmapCache::insert("key", pixmap);
QPixmap cached = QPixmapCache::find("key");

// 使用 SVG
QSvgWidget *svg = new QSvgWidget(":/image.svg");

内存优化 #

及时释放资源 #

cpp
// 清空容器
list.clear();
list.squeeze();  // 释放内存

// 删除大对象
delete largeObject;
largeObject = nullptr;

// 清理缓存
QPixmapCache::clear();

使用轻量级控件 #

cpp
// 使用 QLabel 代替 QTextEdit(只显示文本时)
QLabel *label = new QLabel("Text");

// 使用 QWidget 代替自定义控件(简单容器)
QWidget *container = new QWidget;

算法优化 #

使用 Qt 容器 #

cpp
// 预分配大小
QList<int> list;
list.reserve(1000);

// 使用正确的容器
QVector<int> vector;      // 连续内存,随机访问快
QLinkedList<int> linked;  // 插入删除快
QHash<QString, int> hash; // 查找快

避免不必要的拷贝 #

cpp
// 使用常量引用
void process(const QString &text);

// 使用移动语义
QString text = std::move(otherText);

多线程优化 #

cpp
// 耗时操作放工作线程
QtConcurrent::run([this]() {
    // 耗时操作
    QMetaObject::invokeMethod(this, "updateUI", Qt::QueuedConnection);
});

// 使用线程池
QThreadPool::globalInstance()->start(runnable);

下一步 #

现在你已经掌握了性能优化,接下来学习 单元测试,了解 Qt Test 框架的使用!

最后更新:2026-03-29