一、Qt编程规范类
2026/8/6大约 2 分钟
一、Qt编程规范类
1. QStackedWidget 可以不用索引切换页面
现象:用 QStackedWidget 管理多个页面,传统方式是用 setCurrentIndex(0),但索引容易乱,维护困难。
更好的做法:直接传界面指针切换。
// ❌ 不推荐
ui->stackedWidget->setCurrentIndex(1);
// ✅ 推荐:直接用界面指针
ui->stackedWidget->setCurrentWidget(ui->page_music);优势:不关心索引值,代码可读性更高,添加/删除页面不影响其他切换逻辑。
2. 一个界面类只需要 new 一次
现象:每次打开某个界面都 new 一个实例,关闭时 delete,反复操作导致内存碎片,甚至崩溃。
正确做法:在构造函数中统一 new 好所有子界面,后续只 show/hide。
// 构造函数中创建一次
musicPlayer = new MusicPlayer(this);
searchWindow = new SearchMusic(this);
// 需要显示时
musicPlayer->show();
musicPlayer->raise();
// 关闭时只是隐藏
musicPlayer->hide();理由:避免重复构造/析构的开销,也避免了野指针风险。
3. 空指针会崩溃,一定要初始化
现象:程序运行时突然崩溃,没有任何报错信息。
原因:声明了指针但没有 new,直接使用导致段错误。
// ❌ 危险
QProcess *p_process;
connect(p_process, ...); // 野指针,崩溃!
// ✅ 安全
p_process = new QProcess(this);
connect(p_process, ...);经验:Qt 的指针成员必须在构造函数中初始化,不能仅声明。使用 new 并设置父对象,能自动管理内存。
4. 用 m_ 前缀区分成员变量
原因:在构造函数或成员函数中,参数名和成员变量名容易混淆。使用 m_ 前缀可以一眼区分。
class MusicPlayer {
private:
QMediaPlayer *m_player; // 成员变量带 m_
QMediaPlaylist *m_playlist;
QString m_currentSong;
};
// 构造函数中
MusicPlayer::MusicPlayer(QWidget *parent)
: m_player(new QMediaPlayer(this))
, m_playlist(new QMediaPlaylist(this))
{
// 清晰区分局部变量和成员
}好处:代码可读性提升,避免 this->xxx 的冗余写法。

