标题:多窗口的信号与槽
作者:karlchen
日期:2017-02-08 16:26
内容:
建了两个窗体,一个是MainWindows,一个是Dialog。想实现在通过主窗口,可以打开Dialog,然后通过Dialog的一个按键,改变主窗口的一个Label的值。发现怎么也没反应,请高手给看看
#ifndef DIALOG_H
#define DIALOG_H
#include
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
protected:
void changeEvent(QEvent *e);
private slots:
void on_pushButton_clicked();
private:
Ui::Dialog *ui;
signals:
void sig_1(QString str);
};
#endif // DIALOG_H
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include "dialog.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
Dialog dlg;
private slots:
void slotUpatelabel(QString str);
void on_pushButton_clicked();
};
#endif // MAINWINDOW_H
Mainwidows.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(&dlg,SIGNAL(sig_1()),this,SLOT(slotUpatelabe()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::slotUpatelabel(QString str)
{
ui->label->setText(str);
}
void MainWindow::on_pushButton_clicked()
{
dlg.exec();
}
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h&qu ..
#1 [大漠之鹰 02-08 17:40]
connect(&dlg,SIGNAL(sig_1()),this,SLOT(slotUpatelabe()));
这句话里的信号和槽都需要参数类型吧
#2 [karlchen 02-10 14:35]
加了也一样. connect(&dlg,SIGNAL(sig_1(QString)),this,SLOT(slotUpatelabe(QString)));
#3 [steinlee 02-10 14:59]
dialog要定义成pointer, GUI应用里使用垃圾收集器,要习惯用pointer, 否则你会有很多意想不到的问题
#4 回 steinlee 的帖子 [karlchen 02-13 16:40]
steinlee:dialog要定义成pointer, GUI应用里使用垃圾收集器,要习惯用pointer, 否则你会有很多意想不到的问题
(2017-02-10 14:59)
多谢提醒,但是我发现我的问题不是这个,如果不定义成指针也可以。QT的编译器不能检查connect里面SLOT的函数名,我的问题是那个函数名少了一个l,低级错误。