Название: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: NikolasRA от Август 17, 2013, 13:51 Добрый день. Проблема у меня следующая: есть прямоугольное окно без системной рамки(так мне поставили условие в университете), то есть все кнопки закрытия и сворачивания сделанны вручную, также с помощью событий нажатия и перемещения мыши было реализованно перемещение окна, однако с этим проблемы, при перемещении окно не успевает перемещаться за мышью, кроме того, остаётся след от предыдущего местоположения элементов, то есть они немного размазываются, проблема, я думаю, с отрисовкой всей формы. Вопрос: как реализовыть эту прорисовку, либо отключить системную и вызывать свою? При этом содержимое должно отображаться.
Извиняюсь за возможный повтор темы, сам искал, но ничего, к сожалению, по конкретно моей проблеме не нашёл(ткните если уже таковая была), по этому обратился к вам. Единственное в документации сказано про двойную буферизацию, но что делать когда каждый элемент, в том числе и те, которые создаются динамически требуют корректирования? Версия QT 5.1.0. Рисуется всё на QMainWindow. В Qt недавно, прошу прощения, если вопрос групый. Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: RomiX от Август 17, 2013, 14:06 Я делал перемещение и изменение размера виджета при нажатии на QToolButton с иконкой. Просто ловим событие перемещение мыши и изменяем размер либо позицию, у меня проблем с перерисовкой не было, двигается как обычное окно, так и отдельный виджет
Код: bool GridWidget::eventFilter(QObject *object, QEvent *e) С каждой кнопкой нужно сделать так: Код: m_resizeButton->installEventFilter(this); Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: RomiX от Август 17, 2013, 14:35 Только если двигать окно, надо будет прибавить смещение к координатам, иначе оно сначала "прыгает" на десяток пикселей, а потом нормально перемещается...
Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: NikolasRA от Август 17, 2013, 14:38 То есть так не пойдёт?
Код: void MainWindow::mousePressEvent(QMouseEvent * event) Кстати со следами фильтр событий проблему не решил( видимо вся фишка в отсутствии системной рамки, ибо остальное я не менял, ну разве что наложение маски на форму. Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: RomiX от Август 17, 2013, 14:43 Да вроде всё ок. Странно, у меня без рамки тоже всё отлично, двигаю QLabel так
Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: NikolasRA от Август 17, 2013, 14:45 А если с маской?
Типо так Код: QRect rect(0,0,685,450); Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: RomiX от Август 17, 2013, 14:47 Тоже ок, просто обрезается по прямоугольнику...
По эллипсу тоже работет Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: NikolasRA от Август 17, 2013, 14:48 Хм, странно, он всё равно соскакивает из под мыши, даже если ограничения на область убрать...
Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: RomiX от Август 17, 2013, 14:52 Чтобы не скакало, там надо подобрать смещение для координат... Это если с рамкой, без рамки у меня нормально
А вот изменение размера прыгает, наверное надо сделать resize окна один раз вручную, перед показом окна, и переместить кнопки в нужную позицию в моём случае Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: Igors от Август 17, 2013, 14:59 В аттаче пример, там правда есть ошибка, но уже не помню какая. Впрочем это даже хорошо, разберетесь, не все списывать :)
Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: NikolasRA от Август 17, 2013, 15:01 Так, ну в общем вот код, в нём наверное проблема, ибо без него то есть при стандартном окне всё отлично)
Код: setWindowFlags(Qt::FramelessWindowHint); Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: NikolasRA от Август 17, 2013, 15:05 RomiX, кстати про прыжки, я так понимаю, что относительное перемещение мыши нужно добавлять к её положению в move?
Igors, сейчас посмотрю, спасибо) Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: RomiX от Август 17, 2013, 15:07 Я честно говоря не сильно разбирался со всеми этими координатами, просто заметил что оно прыгает влево вверх, ну и прибавил смещение)
Я сделал чуть-чуть по другому, я создаю виджет поверх передвигаемого виджета... Код: QLabel l("asdasdasdasd"); Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: RomiX от Август 17, 2013, 15:09 Вот целиком
Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: NikolasRA от Август 17, 2013, 15:10 Странно, у меня не прыгает, с одной стороны хорошо, с другой не пойму тогда, в чём проблема(
Если медленно двигать, то всё нормально.. если чуть быстрее- то всё печально.. Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: RomiX от Август 17, 2013, 15:13 Можект какие проблемы с драйверами на видеокарту, я даже между двумя монитормаи дёргаю его очень быстро и всё нормально. А вот qml элементы у меня поддтормаживают, хотя они вроде как те же объекты C++, и перемещение тоже медленно...
Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: RomiX от Август 17, 2013, 15:15 Спрыгивает перемещение обычного окна с рамкой, видимо из-за размеров этой самой рамки, как раз прыгает на её толщину...
Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: NikolasRA от Август 17, 2013, 15:30 Romix, благодарю, у меня примерно такой же подход, просто я отделил каждое событие, а так у меня там LastPoint есть, вроде он как раз за смещение и отвечает, не было resize, добавил, не помогло((( Но всё равно спасибо)
Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: NikolasRA от Август 17, 2013, 15:31 На счёт обычной рамки вы правы, действительно, но пробовал на 3 компьютерах - тоже самое((
Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: RomiX от Август 17, 2013, 15:42 Пожалуйста)
А может зависит от того, что в окне отрисовывается? Я пробовал большую картинку, текст, и видео (для этого и писал)... Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: NikolasRA от Август 17, 2013, 16:41 Чтобы лучше было понятно, в чём проблема, вот скомпилированный файл, интерфейс убогий, но всё-же это тестовая версия, собственно, если у вас всё правильно заработает, то тогда мне только с драйверами возиться)
В один архив не поместился... Чтобы разархивировать 01 02 03 нужно разархивировать в одну папку, после этого в ту папку переместить 0 и разархивировать его, заморочки zip что при разделении другой формат( Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: NikolasRA от Август 17, 2013, 16:42 вот 2 часть
Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: NikolasRA от Август 17, 2013, 16:43 вот 3
Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: NikolasRA от Август 17, 2013, 16:44 ну а вот основная часть, ещё раз прошу прощения за столь моторную передачу, файл слишком велик для передачи целиком(
Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: NikolasRA от Август 17, 2013, 17:40 Igors, ещё раз благодарю, разобрался, там с областью что-то странное было, но убрал, переписал, заработало, как надо, есдинственное, как убрать следящие виджеты, а то смо следом как-то не очень приятно) ну наверное это двойной буферизацией решается..
Может, если кто сталкивался с подобным, отпишитесь, что вы делали? Название: Re: Окно без системной рамки, проблема с отрисовкой при перемещении. Отправлено: Igors от Август 17, 2013, 18:58 Igors, ещё раз благодарю, разобрался, там с областью что-то странное было, но убрал, переписал, заработало, как надо, есдинственное, как убрать следящие виджеты, а то смо следом как-то не очень приятно) ну наверное это двойной буферизацией решается.. ??? Не знаю ни каких "следящих". Буферизация на моем ОС автоматычно, в общем не понял Вашу проблемуМожет, если кто сталкивался с подобным, отпишитесь, что вы делали? |