Zrobiłem sobie przykładowy kod przekazywania zdarzeń z obiektów podrzędnych do obiektów nadrzędnych.
Co chcę uzyskać?
najbardziej interesuje mnie poprawna obsługa zdarzenia QEvent::MouseButtonDblClick
i odbieranie pozostałych zdarzeń bez modyfikacji, gdyż chcę zrobić kalendarz gdzie jak kliknę dwa razy myszką w dowolną datę to odpali mi się jakieś okno z tabelą - w sumie wywoła mi się na przykład slot z oknem.
Co mam? (ale to testy, bo chcę zrozumieć jak to działa)
Wychodzi na to, że jak dodam jakiś dowolny obiekt nadrzędny QWidget
to jakby on przysłaniał zdarzenia z obiektu podrzędnego i te zdarzenia z obiektu podrzędnego dalej nie są odbierane - DLACZEGO?
Tutaj wyjaśnienie co mam w kodzie
mam klasę ChildWidget
class ChildWidget : public QWidget
ciało metody tej klasy jest następująca - tutaj chcę przekazać double Click
do obiektów wyżej
void ChildWidget::mouseDoubleClickEvent(QMouseEvent *event)
{
emit mouseDoublePressed(event);
QWidget::mouseDoubleClickEvent(event);
}
już na tym etapie napiszę, że to działa do momentu gdy nie stworzę nowej klasy z drugim obiektemQWidget
jakby to był "rodzic" (w sumie wszystkie obiekty w Qt są QWidgetami
class ParentWidget : public QWidget
a tak odbieram QEvent
w klasie ParentWidget
ParentWidget::ParentWidget(QWidget *parent) : QWidget(parent)
{
child = new ChildWidget(this);
QObject::connect(child, &ChildWidget::mouseDoublePressed, this, &ParentWidget::handleMouseDoublePress);
}
void ParentWidget::handleMouseDoublePress(QMouseEvent *event)
{
if(event->type()==QEvent::MouseButtonDblClick){
qInfo()<< "double click";
}
}
i całość działa. Pojawia się malutkie okienko i jak kliknie się w to okno dwa razy myszką, to przekazywanie zdarzenia działa... DO MOMENTU jak nie zmieni się rozmiaru okna i wtedy nie działa. Czyli gdzieś na jakimś etapie zdarzenie nie jest przekazywane.
Czy ktoś z was wie jak rozwiązać ten problem? Chcę zrozumieć jak poprawnie przekazywać mouseDoubleClickEvent(QMouseEvent *event)
i inne zdarzenia znajdujące się w klasie QWidget
- na moją logikę te zdarzenia powinny działać, bo w końcu QCalendarWidget
dziedziczy po QWidget
, a ten zawiera metodę mouseDoubleClickEvent(QMouseEvent *event)
, a mimo to nie działa to jak trzeba.
kod znajduje się na GitLabie