1

我有两个窗口,一个父母和一个孩子。在父窗口中,我有一个 Next 按钮,它 onClick()'ed 打开子窗口,但在我的情况下,两个子窗口正在打开,这是什么错误!?

这是我的代码:

.h 文件

主窗口.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

信息.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 文件

主窗口.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();
}

信息.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;
    }
}

主文件

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

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

1 回答 1

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(),我们必须评论任何人才能只显示一个子窗口。就是这样 :-)

于 2013-02-12T06:56:16.227 回答