human_blue 2015-09-06 05:19 采纳率: 40%
浏览 2022
已采纳

基于QT的窗口切换问题

我设计多个窗口,然后切换。问题现象是点击按钮后总是每次出现两个相同窗口,而不是只有一个。窗口界面有QWidget类,也有Dialog类。代码如下:
main.cpp

 #include "widget_login.h"
//#include "mainmenu.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget_Login w;

    w.move(200, 200);
    w.show();

    return a.exec();
}

登录界面widget_login.h

 #include <QWidget>

namespace Ui {
class Widget_Login;
}

class Widget_Login : public QWidget
{
    Q_OBJECT

public:
    explicit Widget_Login(QWidget *parent = 0);
    ~Widget_Login();

private slots:
    void on_pushButton_clicked();

private:
    Ui::Widget_Login *ui;

};

#endif // WIDGET_LOGIN_H

widget_login.cpp

 #include "widget_login.h"
#include "ui_widget_login.h"
#include "dialog.h"
#include "mainmenu.h"
#include <iostream>
#include <fstream>

Widget_Login::Widget_Login(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget_Login)
{
    ui->setupUi(this);
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_pushButton_clicked()));
}

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

void Widget_Login::on_pushButton_clicked()
{
     Mainmenu *menu = new Mainmenu();

   this->close();
   menu->show();

}

主界面mainmenu.h

 #ifndef MAINMENU_H
#define MAINMENU_H

#include <QWidget>
#include "oper_window.h"

namespace Ui {
class Mainmenu;
}

class Mainmenu : public QWidget
{
    Q_OBJECT

public:
    explicit Mainmenu(QWidget *parent = 0);
    ~Mainmenu();

private slots:

    void on_pushButton_SET_clicked();

    void on_pushButton_CHECK_clicked();

    void on_pushButton_OPERATION_clicked();

    void on_pushButton_REPLAY_clicked();

private:
    Ui::Mainmenu *ui;

};


#endif // MAINMENU_H

mainmenu.cpp

 #include "mainmenu.h"
#include "ui_mainmenu.h"
#include "widget_login.h"


Mainmenu::Mainmenu(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Mainmenu)
{
    ui->setupUi(this);
    connect(ui->pushButton_SET, SIGNAL(clicked()), this, SLOT(on_pushButton_SET_clicked()));
    connect(ui->pushButton_CHECK, SIGNAL(clicked()), this, SLOT(on_pushButton_CHECK_clicked()));
    connect(ui->pushButton_OPERATION, SIGNAL(clicked()), this, SLOT(on_pushButton_OPERATION_clicked()));
    connect(ui->pushButton_REPLAY, SIGNAL(clicked()), this, SLOT(on_pushButton_REPLAY_clicked()));
}

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

void Mainmenu::on_pushButton_SET_clicked()
{
    Widget_Login *wi = new Widget_Login;
    this->close();
    wi->show();

}

void Mainmenu::on_pushButton_CHECK_clicked()
{

}

void Mainmenu::on_pushButton_OPERATION_clicked()
{

}

void Mainmenu::on_pushButton_REPLAY_clicked()
{

}
  • 写回答

1条回答 默认 最新

  • threenewbee 2015-09-06 08:05
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 visual studio2022中文乱码无法解决
  • ¥15 关于华为5g模块mh5000-31接线问题
  • ¥15 keil L6007U报错
  • ¥15 webapi 发布到iis后无法访问
  • ¥15 初学者如何快速上手学习stm32?
  • ¥15 如何自动更换布娃娃图片上的衣服
  • ¥15 心理学eprime编程
  • ¥15 arduino esp8266开发
  • ¥15 stm32单片机通过485发送命令给驱动器控制电机转动,同样的代码f103可以控制电机转动,换到f407不能动了,但是用串口助手调试407显示发送的命令都是正确的,卡了好久了这是发送规则
  • ¥15 stm32f103c8t6最小系统板+2.8寸TFTLCD板子