让对象知道其创建的show函数内部发生了什么

时间:2019-06-08 20:54:05

标签: c++ qt

这是我第一次使用Qt IDE,但遇到了问题。 我有两个通过接口连接的类。一个是ContrGeral,另一个是IAAutenticacao。 ContrGeral打开主窗口。为了使IAAutenticacao类运行另一个窗口(或对其进行更新),ContrGeral类如何知道它已执行的show函数内部发生了什么? 我遵循接口的概念,所以我不能只是在MainWindow类(由ContrGeral创建)中放置一系列动作。我需要它以某种方式通知ContrGeral。 由于打开窗口的显示功能不会返回任何东西,也不会收到任何东西,因此我不知道该怎么办。

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 个答案:

答案 0 :(得分:1)

您需要更多有关Qt signals and slots的知识。请先阅读this

然后您可以进行如下连接:

  • 首先在班级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 **/
}

希望它对您有帮助。