2013-02-12 214 views
1

我有两个窗口,一个父窗口和一个子窗口。在父窗口中,我有一个Next按钮,onClick()'ed,打开子窗口,但在我的情况下,有两个子窗口正在打开,我在做什么错误!?Qt中的父窗口和子窗口通信 - 子窗口打开两次

这里是我的代码:

.h文件

mainwindow.h

#ifndef MAINWINDOW_H 
#define MAINWINDOW_H 

#include <QMainWindow> 
#include <info.h> 
#include <QtGui> 

namespace Ui { 
    class MainWindow; 
} 

class MainWindow : public QMainWindow { 
    Q_OBJECT 
public: 
    MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

protected: 
    void changeEvent(QEvent *e); 

private: 
    Ui::MainWindow *ui; 
    void setSignals(); 

private slots: 
    void process(); 
}; 

#endif // MAINWINDOW_H 

info.h

#ifndef INFO_H 
#define INFO_H 

#include <QMainWindow> 

namespace Ui { 
    class info; 
} 

class info : public QMainWindow { 
    Q_OBJECT 
public: 
    info(QWidget *parent = 0); 
    ~info(); 

protected: 
    void changeEvent(QEvent *e); 

private: 
    Ui::info *ui; 
}; 

#endif // INFO_H 

.cpp文件

mainwindow.cpp

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <QtGui/QApplication> 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    setSignals(); 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

void MainWindow::changeEvent(QEvent *e) 
{ 
    QMainWindow::changeEvent(e); 
    switch (e->type()) { 
    case QEvent::LanguageChange: 
     ui->retranslateUi(this); 
     break; 
    default: 
     break; 
    } 
} 

void MainWindow::setSignals(){ 
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(process())); 
    connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(close())); 
} 

void MainWindow::process(){ 
     info *i; 
     i = new info; 
     this -> hide(); 
     i -> show(); 
} 

info.cpp

#include "info.h" 
#include "ui_info.h" 

info::info(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::info) 
{ 
    ui->setupUi(this); 
} 

info::~info() 
{ 
    delete ui; 
} 

void info::changeEvent(QEvent *e) 
{ 
    QMainWindow::changeEvent(e); 
    switch (e->type()) { 
    case QEvent::LanguageChange: 
     ui->retranslateUi(this); 
     break; 
    default: 
     break; 
    } 
} 

的main.cpp

#include <QtGui/QApplication> 
#include "mainwindow.h" 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    MainWindow w; 
    w.show(); 
    return a.exec(); 
} 
+0

显示您的*过程()*功能以及。 – KBart 2013-02-12 06:48:18

回答

2

我解决了这个问题,在这里是问题:

在设计师的头文件即ui_mainwindow.h,我有:

QObject::connect(pushButton, SIGNAL(clicked()), MainWindow, SLOT(process())); QObject::connect(pushButton_2, SIGNAL(clicked()), MainWindow, SLOT(close()));

和源文件即mainwindow.cpp在setSignals(),我再次声明:

void MainWindow::setSignals() 
{ 
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(process())); 
connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(close())); 
} 

所以用两个连接时,我们得到了两个电话给process(),我们也要评论人牛逼o只显示一个孩子窗口。这是它:-)