Заставьте объект знать, что происходит внутри функции шоу, которую он создал - PullRequest
0 голосов
/ 08 июня 2019

Я впервые использую Qt IDE, и у меня возникла проблема. У меня есть два класса, которые связаны через интерфейс. Один является общим, а другой - IAAutenticacao. ContrGeral открывает главное окно. Как класс ContrGeral знает, что происходит внутри функции show, которую он выполнил, чтобы класс IAAutenticacao запускал другое окно (или обновлял его)? Я придерживаюсь концепции интерфейса, поэтому я не могу просто поместить последовательность действий в класс MainWindow (созданный ContrGeral). Мне нужно, чтобы он как-то проинформировал Контроля о ситуации. Поскольку функция show, открывающая окно, ничего не возвращает и не получает, я не знаю, что делать.

main.cpp

#include "windows.h"
#include "controladoras.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    CntrGeral tela_inicial;
    tela_inicial.mostra();

    return a.exec();
}

controladores.h

#ifndef CONTROLADORAS_H
#define CONTROLADORAS_H

#include "interfaces.h"
#include "dominios.h"
#include "windows.h"
#include <QApplication>

#include <stdexcept>

using namespace std;

class CntrGeral {
  private:
    IAAutenticacao *cntrIAAutenticacao;
    IAUsuario *cntrIAUsuario;
    IAEventos *cntrIAEventos;
    MainWindow inicial;

  public:
    void setIAAutenticacao(IAAutenticacao *);
    void setIAUsuario(IAUsuario *);
    void setIAEventos(IAEventos *);

    void mostra();

};

void inline CntrGeral::setIAAutenticacao(IAAutenticacao *cntrIAAutenticacao) {
    this->cntrIAAutenticacao = cntrIAAutenticacao;
}

void inline CntrGeral::setIAEventos(IAEventos *cntrIAEventos) {
    this->cntrIAEventos = cntrIAEventos;
}

void inline CntrGeral::setIAUsuario(IAUsuario *cntrIAUsuario) {
    this->cntrIAUsuario = cntrIAUsuario;
}

void inline CntrGeral::mostra() {
    inicial.show();
}

#endif // CONTROLADORAS_H

Проблема в inicial.show (), после его выполнения ничего не возвращается.

спасибо заранее.

1 Ответ

1 голос
/ 09 июня 2019

Вам нужно больше знаний о Qt signals and slots.прочитайте это до.

Затем вы можете выполнить соединения следующим образом:

  • Сначала добавьте слоты в ваш класс CntrGeral:

controladores.h

class CntrGeral {
...
public slots:
    void onMainWindowPressButton();
...
}
  • Затем подключите и добавьте реализацию слота:

controladores.cpp

CntrGeral::CntrGeral()
{
    ...
    // connect for example "pushButton" (a QPushButton's object)
    // Which is a member of your MainWindow's object "inicial"
    connect(inicial.pushbutton, SIGNAL(release()), 
            this, onMainWindowPressButton());
    ...
}
CntrGeral::onMainWindowPressButton()
{
    /** TODO after push button pressed **/
}

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...