У меня есть многоэкранный видеоплеер, и я просто хочу сохранить соотношение 16: 9.Существует qgroupbox как контейнер qwidget, который воспроизводит видео в нем.Я также использую qgroupbox, чтобы показать выбранный кадр, закрашивая границу до зеленого.Я не могу сделать это на qwidget, потому что отрендеренное видео перекрывает это.Когда я закончил с изменением размера, я посылаю сигнал с событием mouseup, чтобы сообщить о завершении операции изменения размера.Затем я вычисляю новые границы для qwidget, чтобы сохранить соотношение 16: 9, и применяю эти значения для qwidget.Вот изображение, которое показывает вам, как выглядит мое приложение: А вот код, который я использую для изменения размера qwidgets:
void playBack::OnWindowResized()
{
float ratio = 16.0f / 9.0f;
float w = playBackplayer_contList.at(0)->size().width(); //qgroupbox's width
float h = playBackplayer_contList.at(0)->size().height();//qgroupbox's height
float currentRatio = w / h;
float newW = 0;
float newH = 0;
if (currentRatio > ratio)
{
newH = h;
newW = h*ratio;
}
else if (currentRatio < ratio)
{
newW = w;
newH = w / ratio;
}
qDebug() << "NEW WIDGET SIZE: " << (int)newW << " x " << (int)newH;
for (int i = 0; i < playBackplayer_widgtList.count(); i++)
{
playBackplayer_widgtList.at(i)->setMinimumSize(newW, newH);
//playBackplayer_widgtList.at(i)->resize(newW, newH);
}
}
Этот код отлично работает при увеличенииформа, но когда я хочу сжаться, это не позволяет мне сделать это.Потому что я установил минимальное значение для qwidgets.Если я не использую setMinimumSize, используйте вместо этого resize (w, h), тогда возникают проблемы с ориентацией.И вот пример для этой проблемы:
Этот код ниже показывает ctor, и именно здесь я установил макет:
playBack::playBack()
{
playback_player_1_widget = new QWidget;
playback_player_2_widget = new QWidget;
playback_player_3_widget = new QWidget;
playback_player_4_widget = new QWidget;
playback_player_1_widget_cont = new QGroupBox;
playback_player_2_widget_cont = new QGroupBox;
playback_player_3_widget_cont = new QGroupBox;
playback_player_4_widget_cont = new QGroupBox;
playBackplayer_widgtList.append(playback_player_1_widget);
playBackplayer_widgtList.append(playback_player_2_widget);
playBackplayer_widgtList.append(playback_player_3_widget);
playBackplayer_widgtList.append(playback_player_4_widget);
playBackplayer_contList.append(playback_player_1_widget_cont);
playBackplayer_contList.append(playback_player_2_widget_cont);
playBackplayer_contList.append(playback_player_3_widget_cont);
playBackplayer_contList.append(playback_player_4_widget_cont);
int rowcnt = 0;
int colcnt = 0;
for (int i = 0; i < 4; i++)
{
playBackplayer_contList.at(i)->setStyleSheet(QString("border:1px solid #000;background-color:#000;"));
playBackplayer_widgtList.at(i)->setStyleSheet(QString("background-color:#f00;"));
QGridLayout* layout = new QGridLayout;
layout->setRowStretch(0, 1);
layout->setColumnStretch(0, 1);
layout->setRowStretch(2, 1);
layout->setColumnStretch(2, 1);
playBackplayer_widgtList.at(i)->setMinimumWidth(100);
playBackplayer_widgtList.at(i)->setMinimumHeight(100);
playBackplayer_widgtList.at(i)->setMaximumWidth(10000);
playBackplayer_widgtList.at(i)->setMaximumHeight(10000);
layout->addWidget(playBackplayer_widgtList.at(i),1,1);
layout->setMargin(0);
layout->setSpacing(0);
playBackplayer_contList.at(i)->setLayout(layout);
mainLayout->addWidget(playBackplayer_contList.at(i), colcnt, rowcnt);
rowcnt++;
if (rowcnt % 2 == 0)
{
rowcnt = 0;
colcnt++;
}
playBackplayer_widgtList.at(i)->setAcceptDrops(true);
}
}
Я пробовал разные вещи, я пытался установить размер 0 для qwidget перед изменением размера (в mousedownevent), который не работал, я пытался удалить макет для qgroupbox, после изменения размера создайте новый макет и установите его дляgroupbox, который не работал, я пробовал layout () -> AdjustSize (), update (), repaint (), все эти вещи не работали.Что мне не хватает?Мне нужна помощь от тебя.Любая помощь будет оценена.Заранее спасибо.