Je dois créer un 2 événements personnalisés. J'ai suivi ce lien & fait mon code: -
Is there a cleaner way to register Qt custom events?créer & poster le Qevent personnalisé
Est-ce la bonne façon de créer & après & passer quelques données (QString) à l'événement personnalisé?
============================================== =============
code Modifier comme par Kuba Ober sugession: ---
mainwindow.h: -
UpdateEvent *myUpdateEvent ;
ClearEvent *myClearEvent ;
Mainwindow.c: - -
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
i =0;
myUpdateEvent = new UpdateEvent("hello");
myClearEvent = new ClearEvent("bye");
QCoreApplication::postEvent(this, myUpdateEvent);
QCoreApplication::postEvent(this, myClearEvent);
}
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
qDebug() << "oo";
if (UpdateEvent::is(event)) {
UpdateEvent *tempUpdateEvent = static_cast<UpdateEvent *>(event);
qDebug() << tempUpdateEvent->value();
}
else if (ClearEvent::is(event)) {
ClearEvent *tempClearEvent = static_cast<ClearEvent *>(event);
qDebug() << tempClearEvent->value();
}
return true;
}
fichier event.h: -
template <typename T> class StringEvent : public QEvent
{
QString m_str;
public:
explicit StringEvent(const QString val) : QEvent(staticType()), m_str(val)
{
}
QString setvalue(QString val)
{
m_str = val;
}
QString value() const
{
return m_str;
}
static QEvent::Type staticType()
{
static int type = QEvent::registerEventType();
return static_cast<QEvent::Type>(type);
}
static bool is(const QEvent * ev)
{
return ev->type() == staticType();
}
};
class UpdateEvent : public StringEvent<UpdateEvent>
{
public:
explicit UpdateEvent(QString val): StringEvent(val)
{
}
};
class ClearEvent : public StringEvent<ClearEvent>
{
public:
explicit ClearEvent(QString val): StringEvent(val)
{
}
};
Pourquoi eventFilter n'est pas déclenché? Et je ne suis pas en mesure de voir le message de débogage sur postevent?
merci .. beaucoup appris C++ concept de fil de ce dernier ... metafactory chose signifie classe dans une classe? – Katoch
@Katoch: Une metafactory est une classe qui produit d'autres classes pour vous. Ici, 'Update' et' Clear' sont des métafactories qui génèrent la classe 'Event' imbriquée correcte pour vous, à chaque point d'utilisation. J'ai [posé une autre question] (http://stackoverflow.com/q/19187469/1329652) pour obtenir des commentaires de la communauté sur la façon de le faire. –
Je vais suggérer que notre travail aurait également été fait sans utiliser la classe template ... parce que nous n'utilisons pas du tout la variable template T dans notre classe d'événements string ... comme le montre cet exemple ... http: // www .cprogramming.com/tutorial/templates.html .... que dites-vous ...? – Katoch