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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Определение размеров окна.  (Прочитано 6149 раз)
Sanya
Гость
« : Май 06, 2010, 07:52 »

Доброго времени суток!

Вопрос может примитивный, но я что-то не понимаю:
Согласно доке(Window Geometry) функции x(), y(), frameGeometry().width(), frameGeometry().height() возвращают координаты верхнего левого угла и ширину, высоту окна. Но при вызове их от QMainWindow получаю данные скорее Client Area.

Как проверка делаю так:
Код:
setMask(QRegion(x(), y(), frameGeometry().width(), frameGeometry().height()));

Но реальная область методом тыка делается так:
Код:
setMask(QRegion((-3,-22,frameGeometry().width()+6,frameGeometry().height()+3+22));

Как получать нормальные числа, а не подбором "3" и "22"?
Записан
alexman
Гость
« Ответ #1 : Май 06, 2010, 07:56 »

const QRect & QWidget::geometry () const
Записан
Sanya
Гость
« Ответ #2 : Май 06, 2010, 08:05 »

В конструкторе формы:
Код:
    QRect r = ((QWidget*)this)->geometry();
    QRegion wnd(r.x(), r.y(), r.width(), r.height());
    setMask(wnd);
Та же история

Корректно только
Код:
    QRect r = ((QWidget*)this)->geometry();
    QRegion wnd(r.x()-3,r.y()-22,r.width()+6,r.height()+25);
    setMask(wnd);

P.S.:
 Пишу под WinXP
Записан
Sanya
Гость
« Ответ #3 : Май 06, 2010, 11:14 »

Уважаемые форумчане, правильно ли я понимаю:
Вообще виджет QMainWindow ни как не связан с заголовком окна. В том смысле, что отрисовкой этого самого заголовка занимается винда? В таком случае у меня на место "встают" "минусы" координат.

Может быть кто-то подскажет иной способ, ибо задача следующая:
 Скруглить углы главной формы.
Записан
sendevent
Гость
« Ответ #4 : Май 06, 2010, 12:12 »

Вообще виджет QMainWindow ни как не связан с заголовком окна. В том смысле, что отрисовкой этого самого заголовка занимается винда?
да
Скруглить углы главной формы.
либо QWidget::setMask, либо убираешь нативные рамку/тайтл (флагами окна) и рисуешь/обрабатываешь взаимодействие с пользователем самостоятельно.
глянь на виндовый десктоп гдажет (в аттаче); эта тема тоже вроде в тему.
поиск по форуму и примеры (%кьютдир%/икземплз/виджет) расскажут подробнее, что и как ;-)

Записан
Sanya
Гость
« Ответ #5 : Май 06, 2010, 15:08 »

Большое спасибо за ответы, но ...

Проблема не решена.
В том примере что любезно дан sendevent и в правду отказываются вообще от отрисовки заголовка и все ручками - мне это тяжко ибо окно будет много и разных.

Ставить цифры экспериментальные(запас на заголовок) ... с разными темами будет по разному.

Еще один момент всплыл:
при действе QRegion(x,y,rx,ry,QRegion::Ellipse) - эллипс получается асимметричным.

Есть ли еще у кого-нить идеи, плиз?
Записан
kirill
Гость
« Ответ #6 : Май 06, 2010, 15:25 »

Оно не учитавает виндовое обрамление. и правильно в общем то делает.
Записан
Sanya
Гость
« Ответ #7 : Май 06, 2010, 15:45 »

То что не учитывает я прекрасно понимаю, но мне б п учесть .... вообще, напомню, задача сгладить углы.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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