crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

lucifer_vrn
  опции профиля:
сообщение 13.5.2009, 20:33
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 27.2.2009
Пользователь №: 580

Спасибо сказали: 3 раз(а)




Репутация:   0  


сразу, все о чем идет речь сугобо проявляется под линуксом. По виндой все прекрасно.
что происходит:
когда я вызываю функцию QWidget::pos() с некоторой переодичностью, ко мне возвращается QPoint(0,0), хотя координата окна у меня явно не 0,0. Чуть реже но бывает, возвращает не правильную позицию окна +-5 пикселей по вертикали. я в шоке. промучался, вычитал в асисте в статье:
http://doc.crossplatform.ru/qt/en/4.5.0/geometry.html
Цитата
Don't be surprised if you find one where QWidget::frameGeometry() returns wrong results though.

теперь я уже не просто в шоке, а в полном шоке.
помучался, нашел небольшой выход -
QWidget::mapToGlobal(QPoint(0,0))
такой вызов уже (0,0) не возвращает, но +-5 пикселей от реальных координат возвращает.
ппц. я в полном шоке.
можно ли как нибудь достоврено получить координаты окна под Х11 ????

мой код примерно такой:

bool CommunicatorWidget::eventFilter ( QObject * watched, QEvent * event )
{

    if (watched == leftWidget_)
    {
        if (event->type() == QEvent::Hide && !isDock_ && leftWidget_->parent() == 0)
        {
            QPoint pos = leftWidget_->pos();
            if ( pos == QPoint(0,0))
                pos = leftWidget_->mapToGlobal(pos);
            qDebug() << "leftPosSave " << pos;
            Settings::CommunicatorWidget::setLeftWidgetRect(QRect(pos,leftWidget_->size()));
        }
    }
    return QWidget::eventFilter(watched,event);
}

тыкая туда - сюда окно(close()/show()) я вижу как в дебаге возвращается координата, которая по не понятным причинам в случайны момент начинает плыть то на 5 пикселей вврех, то на 5 пикселей вниз....
Причина редактирования: используй тэг code
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
lucifer_vrn
  опции профиля:
сообщение 15.5.2009, 19:14
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 27.2.2009
Пользователь №: 580

Спасибо сказали: 3 раз(а)




Репутация:   0  


потанцевав с одним, двумя и более бубнами придумал следующее:
QPoint pos(rightWidget_->mapToGlobal(QPoint(0,0)).x()-rightWidget_->style()->pixelMetric(QStyle::PM_SplitterWidth)+1,rightWidget_->mapToGlobal(QPoint(0,0)).y()-titleHeight_);

, где заранее в конструкторе определен
titleHeight_ = style()->pixelMetric(QStyle::PM_TitleBarHeight);

как ни странно эта извращенская конструкция вовзращает правильные координаты....
конечно бред, но работает, меня в ней лишь смушает +1..... mapToGlobal(QPoint(0,0)).x() как оказалось вовращает координаты без заголовка и ширины полоски за которую растягиает окно. с заголовком я разобрался - titleHeight это оно и есть. заголовок в самом приложении у меня то есть то нету, поэтому я его как переменную вынес. а вот бордюрчик для растягивания, ширина которого как я понял и есть QStyle::PM_SplitterWidth) возвращает ширину меньшую на 1. может я не правильно запрашиваю эту ширину???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 17.7.2025, 22:41