Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Sanya от Май 06, 2010, 07:52



Название: Определение размеров окна.
Отправлено: 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"?


Название: Re: Определение размеров окна.
Отправлено: alexman от Май 06, 2010, 07:56
const QRect & QWidget::geometry () const


Название: Re: Определение размеров окна.
Отправлено: Sanya от Май 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


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

Может быть кто-то подскажет иной способ, ибо задача следующая:
 Скруглить углы главной формы.


Название: Re: Определение размеров окна.
Отправлено: sendevent от Май 06, 2010, 12:12
Вообще виджет QMainWindow ни как не связан с заголовком окна. В том смысле, что отрисовкой этого самого заголовка занимается винда?
да
Скруглить углы главной формы.
либо QWidget::setMask, либо убираешь нативные рамку/тайтл (флагами окна) и рисуешь/обрабатываешь взаимодействие с пользователем самостоятельно.
глянь на виндовый десктоп гдажет (http://www.prog.org.ru/topic_13299_0.html) (в аттаче); эта тема (http://www.prog.org.ru/topic_11991_0.html) тоже вроде в тему.
поиск по форуму и примеры (%кьютдир%/икземплз/виджет) расскажут подробнее, что и как ;-)



Название: Re: Определение размеров окна.
Отправлено: Sanya от Май 06, 2010, 15:08
Большое спасибо за ответы, но ...

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

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

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

Есть ли еще у кого-нить идеи, плиз?


Название: Re: Определение размеров окна.
Отправлено: kirill от Май 06, 2010, 15:25
Оно не учитавает виндовое обрамление. и правильно в общем то делает.


Название: Re: Определение размеров окна.
Отправлено: Sanya от Май 06, 2010, 15:45
То что не учитывает я прекрасно понимаю, но мне б п учесть .... вообще, напомню, задача сгладить углы.