AC
Alexandru Codreanu26 грудня 2019 р. 15:18

Всплывающие подсказки через PopUp

Доброго времени суток.
Пишу приложение в настройках которoго есть выбор стиля интерфейса приложения:
1. style default (QT)
2. style modern (css)
... также есть настройка вывода подсказок:
- style default - вывод подсказок через setToolTip("aaa");
- style modern - вывод подсказок реализовал через PopUp руководствуясь вашей темой https://evileg.com/ru/post/146/ (уж очень некрасиво выглядит через setToolTip на фоне сделанного через css)
При выборе стиля "modern" - уведомление и подсказки используют PopUp.
Вывод подсказки через PopUp отрабатывается отлично, но переодически выходит ошибка:

qt.qpa.xcb: internal error:  void QXcbWindow::setNetWmStateOnUnmappedWindow() called on mapped window

Привожу мои действия ниже:
... добавил в PopUp.cpp

void PopUp::showFromGeometry(QPoint p)
{
    setWindowOpacity(0.0);

    animation.setDuration(150);
    animation.setStartValue(0.0);
    animation.setEndValue(1.0);

    QSize s(width(), height());
    setGeometry(QRect(p, s));

    QWidget::show();

    animation.start();
}

void PopUp::hidePop()
{
    QWidget::hide();
}

В ListPacients подключаю

#include "popup.h"

    if (settApp->settingUseNote()){

        ui->buttonAddPacient->setMouseTracking(true);
        ui->buttonAddPacient->installEventFilter(this);

        ui->buttonRemovePacient->setMouseTracking(true);
        ui->buttonRemovePacient->installEventFilter(this);
    }

bool ListPacients::eventFilter(QObject *obj, QEvent *ev)
{

    if (obj == ui->buttonAddPacient){

        if (ev->type() == QEvent::Enter){

            QPoint p = mapToGlobal(QPoint(ui->buttonAddPacient->pos().rx() + ui->buttonAddPacient->width(), 
                                   ui->buttonAddPacient->pos().ry()));

            popUp->setPopupText("Добавить нового пациента.");

            popUp->showFromGeometry(p);
            return true;


        } else if (ev->type() == QEvent::Leave){

            popUp->hidePop();
            return true;

    } else if (obj == ui->buttonRemovePacient){

        if (ev->type() == QEvent::Enter){

            QPoint p = mapToGlobal(QPoint(ui->buttonRemovePacient->pos().rx() + ui->buttonRemovePacient->width(), 
                                  ui->buttonRemovePacient->pos().ry() + ui->buttonRemovePacient->pos().ry() - 6));

            popUp->setPopupText("Удалить пациента из БД.");

            popUp->showFromGeometry(p);
            return true;

        } else if (ev->type() == QEvent::Leave){

            popUp->hidePop();
            return true;
        }

     }

    return false;

}
  1. Подскажите как бороться с ошибкой?
  2. Как правильно вычислить координаты кнопки (думаю что не правильно переданы координаты)?
    Не судите строго за глупые вопросы это мое первое приложение на Qt, перевожу с 1С на Qt/C++.
    Спасибо за понимание.
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

4
Evgenii Legotckoi
  • 09 січня 2020 р. 16:24

Добрый день!

  1. Честно говоря, насчёт ошибки даже и не знаю, вы на что-то экзотическое натолкнулись. В исходниках это скорее варнинг, чем прямо ошибка.
    Возможно, что-то с активностью текущего окна. Но по сути, если это не мешает, то можете игнорировать.
  2. Не могли бы вы уточнить, что конкретно не так с координатами? Почему вы считаете, что они не правильно передаются?
    AC
    • 09 січня 2020 р. 23:13

    Думал, что координаты переданны некорректно из-за этого и ошибка(варнинг) выходит. Попытался использовать PopUp и в других формах, также выводится этот варнинг, хотя отрабатывает хорошо. Погуглил, но не нашел ответов о варнинге (в принципе не критично, но хотелось без варнинга).

      Evgenii Legotckoi
      • 10 січня 2020 р. 03:00

      Я вас понимаю, но это экзотическая проблема, причём по ходу платформозависимая. Я правильно понимаю, что у Вы используете Linux? На других платформах пробовали собирать проект?

        AC
        • 10 січня 2020 р. 17:11
        • (відредаговано)

        Да использую Linux (Debian 10).
        Хотя начинал проект на Windows 7, но возникли проблемы при написание кода которые в Windows 7 отрабатывались хорошо, а вот в Linux возникали проблемы.
        На Windows запускал проект, но в режиме работы. В режиме отладки не запускал. Попытался перенаправить варнинг в логи (на Windows) не вышло. Наверное нужно потестить на Windows-e, но так не хочется.

          Коментарі

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

          C++ - Тест 004. Указатели, Массивы и Циклы

          • Результат:90бали,
          • Рейтинг балів8
          МВ

          Qt - Тест 001. Сигналы и слоты

          • Результат:68бали,
          • Рейтинг балів-1
          ЛС

          C++ - Тест 001. Первая программа и типы данных

          • Результат:53бали,
          • Рейтинг балів-4
          Останні коментарі
          A
          ALO1ZE19 жовтня 2024 р. 15:19
          Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
          ИМ
          Игорь Максимов05 жовтня 2024 р. 14:51
          Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
          d
          dblas505 липня 2024 р. 18:02
          QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
          k
          kmssr09 лютого 2024 р. 02:43
          Qt Linux - Урок 001. Автозапуск програми Qt під Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
          АК
          Анатолий Кононенко05 лютого 2024 р. 09:50
          Qt WinAPI - Урок 007. Робота з ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
          Тепер обговоріть на форумі
          J
          JacobFib17 жовтня 2024 р. 10:27
          добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
          ИМ
          Игорь Максимов03 жовтня 2024 р. 11:05
          Реализация навигации по разделам Спасибо Евгений!
          JW
          Jhon Wick01 жовтня 2024 р. 22:52
          Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
          КГ
          Кирилл Гусарев27 вересня 2024 р. 16:09
          Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
          F
          Fynjy22 липня 2024 р. 11:15
          при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

          Слідкуйте за нами в соціальних мережах