16,199
社区成员
发帖
与我相关
我的任务
分享
#ifndef MDUSER
#define MDUSER
#include<QObject>
class Mduser : public QObject
{
Q_OBJECT
public:
Mduser(QObject *parent = 0);
public slots:
void B();
signals:
void send(QString message);
};
#endif // MDUSER
#include"mduser.h"
#include<QDebug>
#include"mdspi.h"
Mduser::Mduser(QObject *parent) :
QObject(parent)
{
}
void Mduser::B()
{
emit send("B");
qDebug() << "This is function B! " << endl;
}
#ifndef MDSPI
#define MDSPI
#include <QObject>
#include "mduser.h"
class mdspi: public QObject
{
Q_OBJECT
public:
mdspi(QObject *parent = 0);
public slots:
A();
signals:
send(QString message);
private:
Mduser md;
};
#endif // MDSPI
#include "mdspi.h"
#include <qDebug>
mdspi::mdspi(QObject *parent) :
QObject(parent)
{
}
mdspi::A()
{
qDebug() << "This is function A!" << endl;
emit send("A");
md.B();
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "mdspi.h"
#include "mduser.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void receive(QString message);
void receive2(QString message);
void on_pushButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::MainWindow *ui;
mdspi spi;
Mduser md;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <qDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(&spi,SIGNAL(send(QString)),this,SLOT(receive(QString)));
connect(&md,SIGNAL(send(QString)),this,SLOT(receive2(QString)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
spi.A();
}
void MainWindow::receive(QString message)
{
qDebug() << "receive A" << endl;
ui->lineEdit->setText(message);
}
void MainWindow::receive2(QString message)
{
qDebug() << "receive B" << endl;
ui->lineEdit_2->setText(message);
}
void MainWindow::on_pushButton_2_clicked()
{
md.B();
}
#ifndef MDSPI
#define MDSPI
#include <QObject>
#include "mduser.h"
class mdspi: public QObject
{
Q_OBJECT
public:
mdspi(QObject *parent = 0);
public slots:
A();
C();
signals:
send(QString message);
private:
Mduser md;
};
#endif // MDSPI
#include "mdspi.h"
#include <qDebug>
mdspi::mdspi(QObject *parent) :
QObject(parent)
{
}
mdspi::A()
{
qDebug() << "This is function A!" << endl;
emit send("A");
md.B();
}
mdspi::C()
{
qDebug() << "This is function C!" << endl;
emit send("C");
class Mduser
{
public:
void B();
mdspi spi;
};
void Mduser::B()
{
qDebug() << "This is function B!" << endl;
spi.C();
}
这个问题困扰挺久了,麻烦帮帮忙
这个明白了。
请允许我再问个问题。假如类mdspi里有函数A,C;另外mduser类是一个封装好的接口,是一个普通的C++类,没有继承QObject,也没有Q_OBJECT,有函数B,函数B就是函数A的响应函数,回调用函数C。如果我想在函数C上发送信号到界面,要怎么实现呢?(在这里,两个类的函数是可以相互调用的,还有需要指出的是mduser类的实现已经封装成dll了,不能改)
#ifndef MDSPI
#define MDSPI
#include <QObject>
#include "mduser.h"
class mdspi: public QObject
{
Q_OBJECT
public:
mdspi(QObject *parent = 0);
public slots:
A();
C();
signals:
send(QString message);
private:
Mduser md;
};
#endif // MDSPI
#include "mdspi.h"
#include <qDebug>
mdspi::mdspi(QObject *parent) :
QObject(parent)
{
}
mdspi::A()
{
qDebug() << "This is function A!" << endl;
emit send("A");
md.B();
}
mdspi::C()
{
qDebug() << "This is function C!" << endl;
emit send("C");
class Mduser
{
public:
void B();
mdspi spi;
};
void Mduser::B()
{
qDebug() << "This is function B!" << endl;
spi.C();
}
这个问题困扰挺久了,麻烦帮帮忙[/quote]
还有一个就是,无法通过Mduser.spi这种方式获取到 mdspi的实例。#ifndef MDSPI
#define MDSPI
#include <QObject>
#include "mduser.h"
class mdspi: public QObject
{
Q_OBJECT
public:
mdspi(QObject *parent = 0);
public slots:
A();
C();
signals:
send(QString message);
private:
Mduser md;
};
#endif // MDSPI
#include "mdspi.h"
#include <qDebug>
mdspi::mdspi(QObject *parent) :
QObject(parent)
{
}
mdspi::A()
{
qDebug() << "This is function A!" << endl;
emit send("A");
md.B();
}
mdspi::C()
{
qDebug() << "This is function C!" << endl;
emit send("C");
class Mduser
{
public:
void B();
mdspi spi;
};
void Mduser::B()
{
qDebug() << "This is function B!" << endl;
spi.C();
}
这个问题困扰挺久了,麻烦帮帮忙