いくつかの方法を使用して実行できますが、最も簡単な方法 (最も賢い方法ではありません) は、オブジェクト A からメインウィンドウ、メインウィンドウから B への中間接続を作成することです。
メインウィンドウ.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "classa.h"
#include "classb.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
classA *a;
classB *b;
signals:
void TosignalA();
void TosignalB();
public slots:
void emitB();
private slots:
void on_pushButton_clicked();
};
#endif // MAINWINDOW_H
メインウィンドウ.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
a = new classA(this);
b=new classB(this);
connect(this,SIGNAL(TosignalA()),this->a,SLOT(emitsig()));
connect(this->a,SIGNAL(signal()),this,SLOT(emitB()));
connect(this,SIGNAL(TosignalB()),this->b,SLOT(on_signal()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::emitB()
{
emit TosignalB();
}
void MainWindow::on_pushButton_clicked()
{
emit TosignalA();
}
classa.h
#ifndef CLASSA_H
#define CLASSA_H
#include <QObject>
class classA : public QObject
{
Q_OBJECT
public:
explicit classA(QObject *parent = 0);
signals:
void signal();
public slots:
void emitsig();
};
#endif // CLASSA_H
classa.cpp
#include "classa.h"
classA::classA(QObject *parent) :
QObject(parent)
{
}
void classA::emitsig()
{
emit signal();
}
classb.h
#ifndef CLASSB_H
#define CLASSB_H
#include <QObject>
#include <QtGui>
class classB : public QObject
{
Q_OBJECT
public:
explicit classB(QObject *parent = 0);
signals:
public slots:
void on_signal();
};
#endif // CLASSB_H
classb.cpp
#include "classb.h"
classB::classB(QObject *parent) :
QObject(parent)
{
}
void classB::on_signal()
{
QMessageBox *msgBox = new QMessageBox();
msgBox->setText("signal emitted!");
msgBox->exec();
}