QEvent. Переопределение метода event().

Добрый день, Евгений.
Сейчас пишу ПО, которая работает с видеокамерой. Программный интерфейс видеокамеры написан на winapi. Получается я в Qt использую winapi-функции, хендлеры и тд. Как я понял,  у каждого виджета есть свой WId, который для Windows платформы является HWND. Так же узнал, что этот WId может измениться в ходе работы программы. На изменение WId есть событие QEvent::WinIdChange. У меня вопрос: как обработать это событие?

1ый вариант.

bool MainWindow::event(QEvent *event)
{
    if(event->type() == QEvent::WinIdChange)
    {
        g_id = winId();
        qDebug() << "WinIdChange";
    }
    return QMainWindow::event(event);
}
В строке return QMainWindow::event(event); я передаю событие на дальнейшую обработку? Мне не понят этот момент.

2ой вариант.
bool MainWindow::event(QEvent *event)
{
    if(event->type() == QEvent::WinIdChange)
    {
        g_id = winId();
        qDebug() << "WinIdChange";
        return true;
    }
    else
    {
        return false;
    }
}
Возвращаемое значение означает обработано ли данное событие или нет. В случае false, событие будет передано дальше на обработку.

Я правильно понял? И какой вариант правильный?

Заранее благодарю за ответ. ;)
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

4
BlinCT
  • June 16, 2017, 4:34 a.m.

(ответ не по теме)
Зачем же вы себя привязываете к платформе эти ... winapi?)
Делайте без привязки, вам зачтется потом) карма и все такое

    Evgenii Legotckoi
    • June 16, 2017, 9:32 a.m.
    • The answer was marked as a solution.

    В документации на метод QObject::event(QEvent *event) сказано, что этот метод должен возвращать true на все случаи event`ов, которые были обработаны в методе, в противном случае должен вызываться метод базового класса. То есть правильнее будет делать так:

    bool MainWindow::event(QEvent *event)
    {
        if(event->type() == QEvent::WinIdChange)
        {
            g_id = winId();
            qDebug() << "WinIdChange";
            return true;
        }
        return QMainWindow::event(event);
    }

      BlinCT, программный интерфейс камеры написан на WINAPi. То есть для того, чтобы управлять камерой, я использую предоставленные мне готовые функции от производителя камеры. А эти функции принимают в качестве аргументов HWND и тд. Вот я и использую WIN API.  Про зачтется потом, я охотно верю ;)
      А вообще, у меня задача стоит завести эту камеру на Linux. Только как, я пока не знаю. Драйвера только для Винды есть.

        EVILEG, благодарю, что все разъяснили. ;)

          Comments

          Only authorized users can post comments.
          Please, Log in or Sign up
          Lz

          C ++ - Test 004. Pointers, Arrays and Loops

          • Result:70points,
          • Rating points1
          РК

          Qt - Test 001. Signals and slots

          • Result:84points,
          • Rating points4
          Last comments
          k
          kmssrFeb. 9, 2024, 2:43 a.m.
          Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
          Qt WinAPI - Lesson 007. Working with ICMP Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
          EVA
          EVADec. 25, 2023, 6:30 p.m.
          Boost - static linking in CMake project under Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
          J
          JonnyJoDec. 25, 2023, 4:38 p.m.
          Boost - static linking in CMake project under Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
          G
          GvozdikDec. 19, 2023, 5:01 a.m.
          Qt/C++ - Lesson 056. Connecting the Boost library in Qt for MinGW and MSVC compilers Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
          Now discuss on the forum
          BlinCT
          BlinCTJune 25, 2024, 8 a.m.
          Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
          Evgenii Legotckoi
          Evgenii LegotckoiJune 24, 2024, 10:11 p.m.
          добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
          BlinCT
          BlinCTMay 5, 2024, 12:46 p.m.
          Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
          Evgenii Legotckoi
          Evgenii LegotckoiMay 2, 2024, 9:07 p.m.
          Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.
          IscanderChe
          IscanderCheApril 30, 2024, 11:22 a.m.
          Во Flask рендер шаблона не передаётся в браузер Доброе утро! Имеется вот такой шаблон: <!doctype html><html> <head> <title>{{ title }}</title> <link rel="stylesheet" href="{{ url_…

          Follow us in social networks