Всплывающие подсказки через 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 р. 01:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
- molni99
- 26 жовтня 2024 р. 01:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Добрый день!
Возможно, что-то с активностью текущего окна. Но по сути, если это не мешает, то можете игнорировать.
Думал, что координаты переданны некорректно из-за этого и ошибка(варнинг) выходит. Попытался использовать PopUp и в других формах, также выводится этот варнинг, хотя отрабатывает хорошо. Погуглил, но не нашел ответов о варнинге (в принципе не критично, но хотелось без варнинга).
Я вас понимаю, но это экзотическая проблема, причём по ходу платформозависимая. Я правильно понимаю, что у Вы используете Linux? На других платформах пробовали собирать проект?
Да использую Linux (Debian 10).
Хотя начинал проект на Windows 7, но возникли проблемы при написание кода которые в Windows 7 отрабатывались хорошо, а вот в Linux возникали проблемы.
На Windows запускал проект, но в режиме работы. В режиме отладки не запускал. Попытался перенаправить варнинг в логи (на Windows) не вышло. Наверное нужно потестить на Windows-e, но так не хочется.