Всплывающие подсказки через 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; }
- Подскажите как бороться с ошибкой?
-
Как правильно вычислить координаты кнопки (думаю что не правильно переданы координаты)?
Не судите строго за глупые вопросы это мое первое приложение на Qt, перевожу с 1С на Qt/C++.
Спасибо за понимание.
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Пожалуйста, авторизуйтесь или зарегистрируйтесь
- Akiv Doros
- 11 ноября 2024 г. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50баллов,
- Очки рейтинга-4
- molni99
- 26 октября 2024 г. 1:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80баллов,
- Очки рейтинга4
- molni99
- 26 октября 2024 г. 1:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20баллов,
- Очки рейтинга-10
Добрый день!
Возможно, что-то с активностью текущего окна. Но по сути, если это не мешает, то можете игнорировать.
Думал, что координаты переданны некорректно из-за этого и ошибка(варнинг) выходит. Попытался использовать PopUp и в других формах, также выводится этот варнинг, хотя отрабатывает хорошо. Погуглил, но не нашел ответов о варнинге (в принципе не критично, но хотелось без варнинга).
Я вас понимаю, но это экзотическая проблема, причём по ходу платформозависимая. Я правильно понимаю, что у Вы используете Linux? На других платформах пробовали собирать проект?
Да использую Linux (Debian 10).
Хотя начинал проект на Windows 7, но возникли проблемы при написание кода которые в Windows 7 отрабатывались хорошо, а вот в Linux возникали проблемы.
На Windows запускал проект, но в режиме работы. В режиме отладки не запускал. Попытался перенаправить варнинг в логи (на Windows) не вышло. Наверное нужно потестить на Windows-e, но так не хочется.