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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Неправильное позиционирование виджета  (Прочитано 7047 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« : Апрель 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
Записан

ArchLinux x86_64 / Win10 64 bit
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Апрель 27, 2016, 15:02 »

Это лучше у венды спросить. Улыбающийся
В linux под KDE5 все в нужных местах.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Апрель 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-у хендла виджета для рендера в виджет видео)...

Блин, странно все это.
« Последнее редактирование: Апрель 27, 2016, 15:59 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Bepec
Гость
« Ответ #3 : Апрель 27, 2016, 18:41 »

Ну по сути получается не учитывается именно frameless. А сдвиг происходит стандартный - с размерами заголовка и маргинами.

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

Сообщений: 305



Просмотр профиля
« Ответ #4 : Апрель 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.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #5 : Апрель 28, 2016, 11:50 »

Цитировать
5.6.0 под win8.1 позиционируется правильно!

Эммм... это с QMediaPlayer + QVideoWidget?
Записан

ArchLinux x86_64 / Win10 64 bit
Bepec
Гость
« Ответ #6 : Апрель 28, 2016, 11:55 »

Я б полазил в исходниках, если б мне кто нить рассказал, как подцепить дебаггеру исходники Qt. Кнопка "Указать исходники Qt" в менюшке gdb не помогает Смеющийся
PS это наследие linux. Когда кнопка есть, каталог выбрать можно. а какой каталог выбирать - хз, хозяин знать должен.
Записан
Vladimir
Крякер
****
Offline Offline

Сообщений: 305



Просмотр профиля
« Ответ #7 : Май 04, 2016, 11:59 »

Цитировать
5.6.0 под win8.1 позиционируется правильно!

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

Это с примером выше приведенным
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #8 : Май 04, 2016, 12:34 »

Каким именно? Там два примера приведено.
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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