查看完整版本: [--
多窗口的信号与槽
--]
QTCN开发网
->
Qt基础编程
->
多窗口的信号与槽
[打印本页]
登录
->
注册
->
回复主题
->
发表主题
karlchen
2017-02-08 16:26
多窗口的信号与槽
建了两个窗体,一个是MainWindows,一个是Dialog。想实现在通过主窗口,可以打开Dialog,然后通过Dialog的一个按键,改变主窗口的一个Label的值。发现怎么也没反应,请高手给看看
复制代码
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
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 <QMainWindow>
#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"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::changeEvent(QEvent *e)
{
QDialog::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void Dialog::on_pushButton_clicked()
{
ui->pushButton->setText("Hello,world");
emit sig_1("hello,world");
}
大漠之鹰
2017-02-08 17:40
connect(&dlg,SIGNAL(sig_1()),this,SLOT(slotUpatelabe()));
这句话里的信号和槽都需要参数类型吧
karlchen
2017-02-10 14:35
加了也一样. connect(&dlg,SIGNAL(sig_1(QString)),this,SLOT(slotUpatelabe(QString)));
steinlee
2017-02-10 14:59
dialog要定义成pointer, GUI应用里使用垃圾收集器,要习惯用pointer, 否则你会有很多意想不到的问题
karlchen
2017-02-13 16:40
steinlee
:
dialog要定义成pointer, GUI应用里使用垃圾收集器,要习惯用pointer, 否则你会有很多意想不到的问题
(2017-02-10 14:59)
多谢提醒,但是我发现我的问题不是这个,如果不定义成指针也可以。QT的编译器不能检查connect里面SLOT的函数名,我的问题是那个函数名少了一个l,低级错误。
查看完整版本: [--
多窗口的信号与槽
--] [--
top
--]
Powered by
phpwind
v8.7
Code ©2003-2011
phpwind
Gzip disabled