三、设计模式与解耦
2026/8/6大约 1 分钟
三、设计模式与解耦
6. connect 写在主窗口,实现界面解耦
原则:独立的界面类之间互相不引用,不知道对方的存在。通过信号槽实现通信。
架构:
- 子界面定义信号(需要通知外界的事情)
- 子界面定义槽函数(接收外界的指令)
- 主窗口负责
connect,连接发送者和接收者
// searchmusic.h - 搜索窗口
class SearchMusic : public QWidget {
signals:
void songDownloaded(const QString &filePath); // 通知外界
};
// musicplayer.h - 播放窗口
class MusicPlayer : public QWidget {
private slots:
void onSongDownloaded(const QString &filePath); // 接收通知
};
// terminal.cpp - 主窗口实现连接
connect(m_searchWindow, &SearchMusic::songDownloaded,
&MusicPlayer, &MusicPlayer::onSongDownloaded);优势:两个界面类完全解耦,互相不知道对方的存在,便于维护和替换。
7. 同一个界面里的信号槽就在该界面实现
原则:如果信号和槽在同一个类中,就在该类内部完成连接,不需要外部介入。
// 在 SearchMusic 构造函数中
connect(ui->pBtn_Search, &QPushButton::clicked,
this, &SearchMusic::onSearchClicked);
connect(ui->pBtn_Download, &QPushButton::clicked,
this, &SearchMusic::onDownloadClicked);理由:内部逻辑内部处理,对外只暴露必要的信号和槽,保持接口最小化。

