1

親と子の 2 つのウィンドウがあります。親ウィンドウには、onClick() された [次へ] ボタンがあり、子ウィンドウが開きますが、私の場合、2 つの子ウィンドウが開いています。

ここに私のコードがあります:

.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

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 ファイル

メインウィンドウ.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();
}
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()));
}

したがって、2 つの接続では、 への 2 つの呼び出しが発生しprocess()ます。子ウィンドウを 1 つだけ表示するように誰かにコメントする必要があります。それでおしまい :-)

于 2013-02-12T06:56:16.227 に答える