AC
Alexandru Codreanu26. Dezember 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
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

4
Evgenii Legotckoi
  • 9. Januar 2020 16:24

Добрый день!

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

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

      Evgenii Legotckoi
      • 10. Januar 2020 03:00

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

        AC
        • 10. Januar 2020 17:11
        • (bearbeitet)

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

          Kommentare

          Nur autorisierte Benutzer können Kommentare posten.
          Bitte Anmelden oder Registrieren
          Letzte Kommentare
          A
          ALO1ZE19. Oktober 2024 08:19
          Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
          ИМ
          Игорь Максимов5. Oktober 2024 07:51
          Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
          d
          dblas55. Juli 2024 11:02
          QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
          k
          kmssr8. Februar 2024 18:43
          Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
          Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
          Jetzt im Forum diskutieren
          J
          JacobFib17. Oktober 2024 03:27
          добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
          JW
          Jhon Wick1. Oktober 2024 15: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. September 2024 09:09
          Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
          F
          Fynjy22. Juli 2024 04:15
          при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

          Folgen Sie uns in sozialen Netzwerken