Здравствуйте, reider, Вы писали:
R>Доброго времени суток.
R>Есть вопрос по QT 4.x
R>Как мне отловить открытие списка ?
R>Перебрал уже все сигналы, но ничего не нашёл...
R>Подскажите пожалуйста как это сделать без переопределоения класса?
R>Заранее благодарен.
Можно подключиться к сигналам (или событиям) виждета, который установлен в качетсве view.
#include <QApplication>
#include <QComboBox>
#include <QDebug>
#include <QAbstractItemView>
#include "eventstosignals.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QComboBox w;
w.addItems({"a", "bb", "cccc", "ddddd"});
connectEvent( w.view(), QEvent::Show, [](QObject */*watched*/, QEvent */*event*/){
qDebug()<<"Show popo-up view";
});
w.show();
return a.exec();
}
| eventstosignals.h |
| // eventstosignals.h
#ifndef EVENTSTOSIGNALS_H
#define EVENTSTOSIGNALS_H
#include <QObject>
#include <QEvent>
class EventsToSignals : public QObject
{
Q_OBJECT
const QEvent::Type type;
public:
EventsToSignals(QObject*parent, QEvent::Type t = QEvent::None )
: QObject(parent), type(t)
{
parent->installEventFilter(this);
}
signals:
void onEvent(QObject *watched, QEvent *event);
private:
bool eventFilter(QObject *watched, QEvent *event)
{
bool handled = QObject::eventFilter(watched, event);
if( type==QEvent::None || type==event->type() )
emit onEvent(watched, event);
return handled;
}
};
template<typename ... Args >
auto connectEvent(QObject *obj, QEvent::Type t, Args ... args)
{
return obj->connect( new EventsToSignals(obj, t), &EventsToSignals::onEvent,
args... );
}
template<typename ... Args >
auto connectEvent(QObject *obj, Args ... args)
{
return obj->connect( new EventsToSignals(obj), &EventsToSignals::onEvent,
args... );
}
#endif // EVENTSTOSIGNALS_H
|
| |
Доброго времени суток.
Есть вопрос по QT 4.x
Как мне отловить открытие списка ?
Перебрал уже все сигналы, но ничего не нашёл...
Подскажите пожалуйста как это сделать без переопределоения класса?
Заранее благодарен.
Здравствуйте, Chorkov, Вы писали:
C>Здравствуйте, reider, Вы писали:
R>>Доброго времени суток.
R>>Есть вопрос по QT 4.x
R>>Как мне отловить открытие списка ?
R>>Перебрал уже все сигналы, но ничего не нашёл...
R>>Подскажите пожалуйста как это сделать без переопределоения класса?
R>>Заранее благодарен.
C>Можно подключиться к сигналам (или событиям) виждета, который установлен в качетсве view.
C>C>#include <QApplication>
C>#include <QComboBox>
C>#include <QDebug>
C>#include <QAbstractItemView>
C>#include "eventstosignals.h"
C>int main(int argc, char *argv[])
C>{
C> QApplication a(argc, argv);
C> QComboBox w;
C> w.addItems({"a", "bb", "cccc", "ddddd"});
C> connectEvent( w.view(), QEvent::Show, [](QObject */*watched*/, QEvent */*event*/){
C> qDebug()<<"Show popo-up view";
C> });
C> w.show();
C> return a.exec();
C>}
C>
C> | eventstosignals.h |
| C>C>// eventstosignals.h
C>#ifndef EVENTSTOSIGNALS_H
C>#define EVENTSTOSIGNALS_H
C>#include <QObject>
C>#include <QEvent>
C>class EventsToSignals : public QObject
C>{
C> Q_OBJECT
C> const QEvent::Type type;
C>public:
C> EventsToSignals(QObject*parent, QEvent::Type t = QEvent::None )
C> : QObject(parent), type(t)
C> {
C> parent->installEventFilter(this);
C> }
C>signals:
C> void onEvent(QObject *watched, QEvent *event);
C>private:
C> bool eventFilter(QObject *watched, QEvent *event)
C> {
C> bool handled = QObject::eventFilter(watched, event);
C> if( type==QEvent::None || type==event->type() )
C> emit onEvent(watched, event);
C> return handled;
C> }
C>};
C>template<typename ... Args >
C>auto connectEvent(QObject *obj, QEvent::Type t, Args ... args)
C>{
C> return obj->connect( new EventsToSignals(obj, t), &EventsToSignals::onEvent,
C> args... );
C>}
C>template<typename ... Args >
C>auto connectEvent(QObject *obj, Args ... args)
C>{
C> return obj->connect( new EventsToSignals(obj), &EventsToSignals::onEvent,
C> args... );
C>}
C>#endif // EVENTSTOSIGNALS_H
C>
|
| |
Огромное спасибо!!!