这是我第一次使用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();
}


控制者

#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()上,一旦执行便不返回任何内容。

提前致谢。

最佳答案

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

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


首先在班级CntrGeral中添加广告位:


控制者

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 **/
}


希望对您有帮助。

09-26 09:32