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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] QVideoWidget неправильно разворачивается во весь экран  (Прочитано 10534 раз)
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« : Июль 22, 2016, 10:15 »

Проблема в теме.

Windows 7. Qt 5.6.0

Код окна-плеера ниже так же как и архив с минимальным проектом, и скрином окна-плеера, когда он развернулся во весь экран.

Код
C++ (Qt)
class VideoWidget: public QVideoWidget {
  Q_OBJECT
 
public:
   VideoWidget() : QVideoWidget() {
       setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
       auto p = palette();
       p.setColor(QPalette::Window, Qt::black);
       setPalette(p);
       setAttribute(Qt::WA_OpaquePaintEvent);
 
       auto player = new QMediaPlayer();
       player->setVideoOutput(this);
       player->setMedia(QUrl("C:/Users/ipetrash/Desktop/7f_Gravity.Falls.S01E01.rus.vo.sienduk.a1.08.12.15.mp4"));
       player->play();
   }
 
   void keyPressEvent(QKeyEvent* event) {
       if (event->key() == Qt::Key_Escape && isFullScreen()) {
           setFullScreen(false);
           event->accept();
       } else {
           QVideoWidget::keyPressEvent(event);
       }
   }
 
   void mouseDoubleClickEvent(QMouseEvent* event) {
       setFullScreen(!isFullScreen());
       event->accept();
   }
};
 

Спасибо Улыбающийся
« Последнее редактирование: Июль 22, 2016, 13:20 от gil9red » Записан

Bepec
Гость
« Ответ #1 : Июль 22, 2016, 10:21 »

Ну, фуллскрин для окна, это то что у вас получается. Т.к. панель задач по умолчанию на переднем плане.
Чтобы сделать фуллскрин полным, нужно делать stayOnTop для окна.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Июль 22, 2016, 10:42 »

А почему тогда фуллскрин просто виджета полностью закрывает все пространство?
И если приглядеться на верх скрина, можно заметить, что окно частично оставило открытым
Записан

Bepec
Гость
« Ответ #3 : Июль 22, 2016, 12:28 »

Ну, тут видимо бага, учитывается заголовок окна и отсутствует "StayOnTop" для VideoWidget при фуллскрине.
Если вам интересно, полазьте по исходникам. (а мне чет не очень интересно Веселый )

PS в качестве костыля могу предложить флаги framelessWindow / stay on top и resize по QDesctopWidget size. Результат будет тот же что и от фуллскрина, но... костыль епть Веселый
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Июль 22, 2016, 12:32 »

Ну, тут видимо бага, учитывается заголовок окна и отсутствует "StayOnTop" для VideoWidget при фуллскрине.
Если вам интересно, полазьте по исходникам. (а мне чет не очень интересно Веселый )

PS в качестве костыля могу предложить флаги framelessWindow / stay on top и resize по QDesctopWidget size. Результат будет тот же что и от фуллскрина, но... костыль епть Веселый

Ага, нужно будет поиграться Улыбающийся
Записан

gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Июль 22, 2016, 13:20 »

Поигрался и получилось, что проблема проявляется если QVideoWidget является центральнм виджетом, т.е. напрямую указывается в setCentralWidget.
Если центральным виджетом указать виджет, содержащий QVideoWidget, то проблемы нет.

UPDATE.
Но если указать в лайауте отступы, то снова проявляется баг.
Код
C++ (Qt)
layout->setContentsMargins(0, 0, 0, 5);
WTF? O_o

Код
C++ (Qt)
VideoWidget w;
 
QWidget ww;
auto layout = new QVBoxLayout();
layout->addWidget(&w);
ww.setLayout(layout);
ww.show();
 
QMainWindow ww;
ww.setCentralWidget(&w);
ww.show();
« Последнее редактирование: Июль 22, 2016, 13:25 от gil9red » Записан

Bepec
Гость
« Ответ #6 : Июль 22, 2016, 13:33 »

Бгг... страшные дела с setCentralWidget. Я его вообще не пользую, ибо он мутный какой то Веселый
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #7 : Июль 22, 2016, 14:02 »

Бгг... страшные дела с setCentralWidget. Я его вообще не пользую, ибо он мутный какой то Веселый

И QMainWindow тоже не используете? Ведь setLayout для QMainWindow не работает
Записан

gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #8 : Июль 22, 2016, 14:20 »

Создал багу на джире Qt: https://bugreports.qt.io/browse/QTBUG-54906
Записан

Bepec
Гость
« Ответ #9 : Июль 22, 2016, 14:26 »

Ну как бы использую. Вот только setCentralWidget не пользую Улыбающийся
Ну или если быть точнее - в коде я его не пользую.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #10 : Июль 22, 2016, 14:31 »

А как тогда можно с QMainWindow работать? Или вы используете какой-то грязный хак, чтобы разместить на QMainWindow виджеты, обходя setCentralWidget? Улыбающийся
Записан

Bepec
Гость
« Ответ #11 : Июль 22, 2016, 14:37 »

Не, если создавать всё в дизайнере, то баги связанные с ним не проявляются. Почему? Видимо там скрытый виджет создаётся, на котором и размещаются все дизайнерские компоненты.
А как только вызываешь в коде и ставишь свой виджет, сыпятся баги. Я пару тройку проблем помню начинал решать, потом плюнул Веселый
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #12 : Июль 22, 2016, 19:40 »

> Создал багу на джире Qt:

Гыы.. долго будешь ждать... Ёхан Лопес - он такой медлительный/глухой/слепой..

ЗЫ: Я по этому поводу "разворошил" development список рассылки, типа что за хрень, почему баги не фигсятся и вообще, мейнтейнер молчит как партизан, что в лоб что по лбу..  Подмигивающий
ЗЫ2: Придется тебе самому "баг" фиксить..
Записан

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

Сообщений: 1805



Просмотр профиля WWW
« Ответ #13 : Июль 22, 2016, 22:32 »

> Создал багу на джире Qt:

Гыы.. долго будешь ждать... Ёхан Лопес - он такой медлительный/глухой/слепой..

ЗЫ: Я по этому поводу "разворошил" development список рассылки, типа что за хрень, почему баги не фигсятся и вообще, мейнтейнер молчит как партизан, что в лоб что по лбу..  Подмигивающий
ЗЫ2: Придется тебе самому "баг" фиксить..

Вот блин Грустный
Можно, конечно варианты посмотреть:
1. не устанавливать границы лайута
2. попробовать воспроизводить в QML или на графической сцене -- может без бага обойдется  Улыбающийся
Записан

gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #14 : Июль 26, 2016, 16:11 »

> Создал багу на джире Qt:

Гыы.. долго будешь ждать... Ёхан Лопес - он такой медлительный/глухой/слепой..

ЗЫ: Я по этому поводу "разворошил" development список рассылки, типа что за хрень, почему баги не фигсятся и вообще, мейнтейнер молчит как партизан, что в лоб что по лбу..  Подмигивающий
ЗЫ2: Придется тебе самому "баг" фиксить..

А дело то у них пошло Веселый
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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