Russian Qt Forum

Qt => Общие вопросы => Тема начата: kuzulis от Апрель 27, 2016, 14:45



Название: Неправильное позиционирование виджета
Отправлено: kuzulis от Апрель 27, 2016, 14:45
Всем привет.

Столкнулся тут с проблемкой, которая заключается в том, что виджет некорректно позиционируется, т.е. с какими-то непонятными отступами.

Вот, собственно, код:

Код
C++ (Qt)
   QWidget widget;
   widget.setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
   widget.setWindowModality(Qt::ApplicationModal);
   widget.setStyleSheet(QLatin1String("background-color: \"black\""));
   widget.resize(300, 200);
   widget.move(0, 0); // Якорь должен быть в левом верхнем углу, но этого нет
   widget.show();
 

интересно, что используя QQuickView и сделав с ним аналогичные манипуляции (только используя setPosition(0, 0)),
я получаю желаемое...

Кто-нить в курсе, что за хрень творится?  :-\

PS: Qt 5.6.0, Windows


Название: Re: Неправильное позиционирование виджета
Отправлено: Old от Апрель 27, 2016, 15:02
Это лучше у венды спросить. :)
В linux под KDE5 все в нужных местах.


Название: Re: Неправильное позиционирование виджета
Отправлено: kuzulis от Апрель 27, 2016, 15:49
Оппачки.. это (сдвиг) случается, например в таком случае:

Код
C++ (Qt)
class MediaPlayer : public QWidget
{
public:
   MediaPlayer(QWidget *parent = 0)
       : QWidget(parent)
   {
       player = new QMediaPlayer(this);
       player->setVideoOutput(this); // Вот из-за этого  :o
   }
private:
   QMediaPlayer *player;
}
 
main()
{
   ....
   MediaPlayer widget;
   widget.setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
   widget.setWindowModality(Qt::ApplicationModal);
   widget.setStyleSheet(QLatin1String("background-color: \"black\""));
   widget.resize(300, 200);
   widget.move(0, 0); // это не работает правильно из-за setVideoOutput(...)
   widget.show();
   ...
}
 

И такая-же ситуация, если виджет является "враппером" для MPlayer. После старта Mplayer в режиме ведомого (с передачей MPlayer-у хендла виджета для рендера в виджет видео)...

Блин, странно все это.


Название: Re: Неправильное позиционирование виджета
Отправлено: Bepec от Апрель 27, 2016, 18:41
Ну по сути получается не учитывается именно frameless. А сдвиг происходит стандартный - с размерами заголовка и маргинами.

PS грязный хак - просто отнимать от координат их размеры.


Название: Re: Неправильное позиционирование виджета
Отправлено: Vladimir от Апрель 28, 2016, 10:13
C Qt4.8.6, 5.4.2, 5.6.0 под win8.1 позиционируется правильно! Правда в 5.6.0 выводит
Warning: QT_DEVICE_PIXEL_RATIO is deprecated. Instead use:
    QT_AUTO_SCREEN_SCALE_FACTOR to enable platform plugin controlled per-screen factors.
    QT_SCREEN_SCALE_FACTORS to set per-screen factors.
    QT_SCALE_FACTOR to set the application global scale factor.


Название: Re: Неправильное позиционирование виджета
Отправлено: kuzulis от Апрель 28, 2016, 11:50
Цитировать
5.6.0 под win8.1 позиционируется правильно!

Эммм... это с QMediaPlayer + QVideoWidget?


Название: Re: Неправильное позиционирование виджета
Отправлено: Bepec от Апрель 28, 2016, 11:55
Я б полазил в исходниках, если б мне кто нить рассказал, как подцепить дебаггеру исходники Qt. Кнопка "Указать исходники Qt" в менюшке gdb не помогает ;D
PS это наследие linux. Когда кнопка есть, каталог выбрать можно. а какой каталог выбирать - хз, хозяин знать должен.


Название: Re: Неправильное позиционирование виджета
Отправлено: Vladimir от Май 04, 2016, 11:59
Цитировать
5.6.0 под win8.1 позиционируется правильно!

Эммм... это с QMediaPlayer + QVideoWidget?

Это с примером выше приведенным


Название: Re: Неправильное позиционирование виджета
Отправлено: kuzulis от Май 04, 2016, 12:34
Каким именно? Там два примера приведено.