|
5Qter豆
我设计多个窗口,然后切换。问题现象是点击按钮后总是每次出现两个相同窗口,而不是只有一个。窗口界面有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()
- {
- }
复制代码 |
最佳答案
查看完整内容
问题的原因:
你的问题应该是信号和槽重复关联的两次
你使用的是ui文件,包含了#include "ui_widget_login.h"头文件,在头文件里面会根据objectname自动关联一次on_pushButton_clicked()槽,然后你又自己添加了 connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_pushButton_clicked()));就相当于关联两次,所以你点击一次pushButton,会触发两次槽。
解决方案:
第一种,删除 connect(ui->pushButton, SIGNAL(clicked() ...
|