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