Потрібно продемонструвати роботу boost::signal у себе на роботі.
Створив "простий" приклад інкременту лічильника при натисканні на QPushButton.
Але виходить якось не дуже "просто". Особливо не подобається мій setParent і вказівник MyPushButton* parent у тілі делегату.
Я новачок в boost, що я пропустив? Як спростити приклад до природнього вигляду?.
P.S. Я знаю що в Qt існують свої класні signals & slots, прохання цю тему не підіймати.
#include <boost/signal.hpp>
#include <boost/bind.hpp>
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#define QT_NO_KEYWORDS
class MyPushButton : public QPushButton
{
public:
MyPushButton()
{
slotButtonClick.setParent(this);
signalPress.connect(slotButtonClick);
clC = 0;
}
private:
void mousePressEvent ( QMouseEvent * e )
{
QPushButton::mousePressEvent(e);
}
void mouseReleaseEvent ( QMouseEvent * e )
{
QPushButton::mouseReleaseEvent(e);
++clC;
signalPress();
}
boost::signal<void()> signalPress;
unsigned long clC;
struct onButtonClick
{
void setParent(MyPushButton* aParent)
{
parent = aParent;
}
void operator()()const
{
if ( parent->clC == 1)
parent->setText(tr("You clicked this button "));
else
parent->setText(tr("Clicked this button ") + QString::number(parent->clC) + tr(" times!"));
}
MyPushButton* parent;
} slotButtonClick;
};
int main(int argc, char ** argv)
{
QApplication app (argc, argv);
MyPushButton *mbtn = new MyPushButton();
mbtn->setText("Untouched button");
mbtn->show();
return app.exec();
}