在子窗口与程序主窗口分属不同的类和页面,要实现修改内容并在主程序窗口通知QLabel显示,需要发送信号。该问题可通过自定义信号和槽的方式实现。
SettingDialog.h
1. class SettingDialog : public QDialog
2. {
3. Q_OBJECT
4.
5. public:
6. SettingDialog(QWidget *parent = Q_NULLPTR);
7. ~SettingDialog();
8.
9. signals:
10. void SignalUpdateIcon(QString);
11.
12. private:
13. Ui::SettingDialog ui;
14.
15. };
SettingDialog.cpp
1. SettingDialog::SettingDialog(QWidget *parent)
2. : QDialog(parent)
3. {
4. ui.setupUi(this);
5.
6. connect(ui.buttonOK, SIGNAL(clicked()), this, SLOT(changeHeadPortrait()));
7. }
8.
9. SettingDialog::~SettingDialog()
10. {
11. }
12.
13. void SettingDialog::changeHeadPortrait()
14. {
15. emit SignalUpdateIcon(m_strPreviewPic);
16. this->hide();
17. }
主窗口类中实现相关槽函数。
头文件:
1. private slots:
2. void updateIcon(QString);
cpp文件构造函数内关联信号和槽:
1. m_settingDialog = new SettingDialog(this);
2. connect(m_settingDialog,SIGNAL(SignalUpdateIcon(QString)),this,SLOT(updateIcon(QString)));
updateIcon函数实现:
4. // 头像更新槽函数
5. void SkypeDemo::updateIcon(QString newStrPic)
6. {
7. //设置图片路径
8. setStrPic(newStrPic);
9. m_headLabel->setPixmap(QPixmap(m_strPic));
10. }