#include <QApplication>
#include <QThreadPool>
#include <QEvent>
#include <iostream>
#include "mainwindow.h"
#include "mqexception.h"
#include <iostream>
G_DEFINE_TYPE(TestGReceiver, TestReceiver, G_TYPE_OBJECT)
static void TestReceiver_class_init(TestGReceiverClass* /*self*/) {
}
static void TestReceiver_init(TestGReceiver* self) {
self->testSlot = NULL;
}
//static void gTestSlot(_TestGReceiver* /*receiver*/) {
// std::cout << "info: signal received" << std::endl;
//}
static void
notify(GObject* /*object*/, GParamSpec* /*spec*/, gpointer /*user_data*/)
{
std::cout << "notify: signal received" << std::endl;
}
MainWindow::MainWindow(QWidget* parent)
: QMainWindow(parent)
{
mButton = new QPushButton("My Button", this);
mButton->setGeometry(QRect(QPoint(100, 100), QSize(200, 50)));
connect(mButton, &QPushButton::released,
this, &MainWindow::handleButton);
mMessageJob = new mq::MessageJob(
QApplication::applicationName().toStdString());
connect(mMessageJob, &mq::MessageJob::clickSignal,
mButton, &QPushButton::click);
connect(mMessageJob, &mq::MessageJob::closeSignal,
this, &MainWindow::quit);
QThreadPool::globalInstance()->start(mMessageJob);
mTestGReceiver = static_cast<TestGReceiver*>(
g_object_new(TestReceiver_get_type(), NULL));
//mTestGReceiver->testSlot = gTestSlot;
mSignal = g_signal_new(
"test-signal",
G_TYPE_OBJECT,
G_SIGNAL_RUN_LAST,
//G_STRUCT_OFFSET(_TestGReceiver, testSlot),
0,
NULL,
NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE,
0,
G_TYPE_NONE);
g_signal_connect(mTestGReceiver, "test-signal", G_CALLBACK(notify), NULL);
}
void
MainWindow::quit()
{
g_object_unref(mTestGReceiver);
emit quitSignal();
}
bool
MainWindow::event(QEvent* event)
{
if (event->type() == QEvent::Close) {
mMessageJob->close();
}
return QMainWindow::event(event);
}
void
MainWindow::handleButton()
{
g_signal_emit(G_OBJECT(mTestGReceiver), mSignal, 0, 0);
//g_signal_emit_by_name(G_OBJECT(mTestGReceiver), "test-signal", 0, 0);
mButton->setText("Example");
}