Russian Qt Forum
Сентябрь 29, 2024, 20:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 4.4.3, ерунда с pos(), господа  (Прочитано 9527 раз)
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« : Февраль 20, 2009, 16:32 »

Привет. Постестируйте пожалуйста из пакета Qt примеров пример shapedclock. Это часы без оконного заголовка, но которые можно таскать мышкой. Там выясняется, что (по крайней мере у меня) 100% есть баг с pos(). Я добавил туда пару дебуг строк:

Код:
void ShapedClock::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {
        dragPosition = event->globalPos() - frameGeometry().topLeft();
        qDebug() << "klik" << dragPosition;
        event->accept();
    }
}

void ShapedClock::mouseMoveEvent(QMouseEvent *event)
{
    if (event->buttons() & Qt::LeftButton) {
        qDebug() << "move" << pos() << event->globalPos() << dragPosition << (event->globalPos() - dragPosition);
        move(event->globalPos() - dragPosition);
        event->accept();
    }
}

Вот что он выводит когда я пытаюсь зацепить мышью окно и подвинуть:
Код:
klik QPoint(639,525)
move QPoint(0,0) QPoint(640,525) QPoint(639,525) QPoint(1,0)

т.е. первоначально pos() == QPoint(0, 0)!, собственно поэтому при первоначальном движении окна эти часы прыгают в верхний левый угол. У кого воспроизводится?

У меня Qt 4.4.3, Debian Lenny.

P.S Если не воспроизводится, поставьте в настройках своего WM чтобы он принудительно центрировал новые окна, и опять потестите. Ввозможно Qt не обновляет pos() после того, как WM принудительно подвинул окно.
« Последнее редактирование: Февраль 20, 2009, 16:35 от Alex Custov » Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Февраль 20, 2009, 17:17 »

Проверил в 3.3.8 - работает без багов, всё ок

добавление
нашёл такое же за 2007 год - https://bugzilla.redhat.com/show_bug.cgi?id=426354 , прикол
« Последнее редактирование: Февраль 20, 2009, 17:23 от Alex Custov » Записан
SABROG
Гость
« Ответ #2 : Февраль 20, 2009, 17:27 »

Я так понял этот баг есть только в *nix'ах при включеном центрировании окон?
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Февраль 20, 2009, 17:35 »

попробовал разные методы расположения окон в KWin - без разницы, баг есть при любом раскладе.
Записан
SABROG
Гость
« Ответ #4 : Февраль 20, 2009, 17:42 »

В виндах такого нет:

Код:
click QPoint(54,22)
move QPoint(320,308) QPoint(375,330) QPoint(54,22) QPoint(321,308)
move QPoint(321,308) QPoint(376,331) QPoint(54,22) QPoint(322,309)
move QPoint(322,309) QPoint(378,333) QPoint(54,22) QPoint(324,311)
move QPoint(324,311) QPoint(379,333) QPoint(54,22) QPoint(325,311)
move QPoint(325,311) QPoint(380,334) QPoint(54,22) QPoint(326,312)
move QPoint(326,312) QPoint(381,334) QPoint(54,22) QPoint(327,312)
move QPoint(327,312) QPoint(381,335) QPoint(54,22) QPoint(327,313)
move QPoint(327,313) QPoint(382,336) QPoint(54,22) QPoint(328,314)
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Февраль 20, 2009, 17:44 »

у меня на виндовозе нет такого эфекта.
(Qt 4.4.3, Win2kSP4)
Записан

Юра.
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #6 : Февраль 20, 2009, 17:57 »

На винде это хорошо, но мне бы в Linux.

добавление
попробовал openbox вместо kwin - тоже самое. Самое интересное, что самый первый вызов XGetWindowAttributes() в mousePressEvent() отдаёт координаты (0,0), хотя окно находится где-то в середине экрана, явно не в (0,0):

Код:
static bool fix(QWidget *w)
{
    XWindowAttributes attrs;
    XGetWindowAttributes(QX11Info::display(), w->effectiveWinId(), &attrs);

    qDebug() << attrs.x << attrs.y;

    return true;
}


void ShapedClock::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {
        static bool b = fix(this);

        dragPosition = event->globalPos() - frameGeometry().topLeft();
        event->accept();
    }
}
« Последнее редактирование: Февраль 20, 2009, 18:23 от Alex Custov » Записан
SABROG
Гость
« Ответ #7 : Февраль 20, 2009, 18:20 »

Возможно косяк закрался где-то в самом X-сервере. Даже тут говорится, что не все ладно с ним http://doc.trolltech.com/4.5/geometry.html
Записан
LeNsTR
Гость
« Ответ #8 : Февраль 24, 2009, 20:48 »

klik QPoint(41,92)
move QPoint(1120,0) QPoint(1161,93) QPoint(41,92) QPoint(1120,1)

KDE4.2, Qt4.5, багов нет  Улыбающийся
Записан
drsm
Гость
« Ответ #9 : Февраль 25, 2009, 10:21 »

у меня под гномом тоже какая-то ерунда происходит с програмным перемещением QDockWidget во floating mode.
симптомы похожи на https://bugzilla.redhat.com/show_bug.cgi?id=426354
те пока не двинули главное окно, QDockWidget::setGeometry() куда-то нетуда вобще двигает.
также глючит maxmize/restore
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #10 : Февраль 25, 2009, 10:33 »

там написано что это баг metacity, но у меня он на kwin|openbox воспроизводится на ура.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.117 секунд. Запросов: 23.