Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: evgenm27 от Март 22, 2017, 16:11



Название: При нажатии на кнопку создается 2 окна
Отправлено: evgenm27 от Март 22, 2017, 16:11
Здравствуйте, при нажатии на кнопку первое окно исчезает и появляется второе, при нажатии кнопки "назад" второе окно закрывается и появляется первое. Но при нажатии создается 2 окна, почему так происходит?

AppMainWindow.cpp
Код
C++ (Qt)
#include "appmainwindow.h"
#include "ui_appmainwindow.h"
#include "addwindow.h"
 
AppMainWindow::AppMainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::AppMainWindow)
{
   ui->setupUi(this);
 
   connect(ui->button_add,SIGNAL(clicked()),this,SLOT(on_button_add_clicked()));
}
 
AppMainWindow::~AppMainWindow()
{
   delete ui;
}
 
void AppMainWindow::on_button_add_clicked()
{
   AddWindow *win = new AddWindow(this);
   win->show();
   this->hide();
 
   connect(win,SIGNAL(signal_back_clicked()),this,SLOT(show()));
}

AddWindow.cpp
Код
C++ (Qt)
#include "addwindow.h"
#include "ui_addwindow.h"
 
AddWindow::AddWindow(QWidget *parent) :
   QDialog(parent),
   ui(new Ui::AddWindow)
{
   ui->setupUi(this);
   setLayout(ui->verticalLayout);
 
   connect(ui->button_back,SIGNAL(clicked()),this,SLOT(on_button_back_clicked()));
}
 
AddWindow::~AddWindow()
{
   delete ui;
}
 
void AddWindow::on_button_back_clicked()
{
   emit signal_back_clicked();
   close();
}
(http://savepic.ru/13342928.jpg)   (http://savepic.ru/13332688.jpg)


Название: Re: При нажатии на кнопку создается 2 окна
Отправлено: Alex Custov от Март 22, 2017, 16:43
думаю потому что соединение ui->button_add -> on_button_add_clicked() создаётся автоматически, и ты создаёшь его второй раз вручную. Слот будет вызван два раза.


Название: Re: При нажатии на кнопку создается 2 окна
Отправлено: evgenm27 от Март 22, 2017, 18:12
Закоментил коннект и действительно все заработало как надо. Спасибо! А не разъясните почему коннект срабатывает автоматически?


Название: Re: При нажатии на кнопку создается 2 окна
Отправлено: Alex Custov от Март 22, 2017, 18:48
Закоментил коннект и действительно все заработало как надо. Спасибо! А не разъясните почему коннект срабатывает автоматически?

потому что setupUi() вызывает этот метод https://doc.qt.io/qt-5/qmetaobject.html#connectSlotsByName


Название: Re: При нажатии на кнопку создается 2 окна
Отправлено: evgenm27 от Март 22, 2017, 19:01
Закоментил коннект и действительно все заработало как надо. Спасибо! А не разъясните почему коннект срабатывает автоматически?

потому что setupUi() вызывает этот метод https://doc.qt.io/qt-5/qmetaobject.html#connectSlotsByName
Спасибо!


Название: Re: При нажатии на кнопку создается 2 окна
Отправлено: lit-uriy от Март 23, 2017, 06:24
У тебя ещё по каждому нажатию кнопки создаётся новое окно, не проверяется его существование. И затем оно не удаляется.