Widget в друг widget Qt

Опитвам се да постигна това оформление:

въведете описание на изображението тук

където Widget1 е някаква джаджа (централна джаджа на QMainWindow) и искам да добавя втора джаджа Widget2 върху нея, но тя трябва да е в левия долен ъгъл на Widget1.


РЕДАКТИРАНЕ: предишното ми описание не беше много полезно, така че ще се опитам да го опиша по-подробно.

Наследявам клас QWidget (class MyClass : public QWidget) и създавам моя собствена джаджа, където в void MyClass ::paintEvent(QPaintEvent *event) рисувам нещо на екрана. Тогава MyClass е centralWidget от моите QMainWindow.

Сега отгоре на това искам да добавя по-малка джаджа (Widget2 в изображението), където ще покажа малко видео (тук не питам как да покажа видео, а как да добавя тази Widget2 към моя изглед). Основното тук е, че Widget2 е вътре (плаващ) Widget1.

EDIT2: Предишният код, който публикувах, е боклук.


person carobnodrvo    schedule 15.07.2016    source източник
comment
изглежда, че не работи не е много добро описание на проблема. Освен това се нуждаете от повече информация, за предпочитане от повече код. Кое оформление използвате? Какво друго има в оформлението? В зависимост от това какво друго има, вероятно искате QGridLayout, въпреки че можете да постигнете това, което искате, и по много други начини. Използвате ли Designer или създавате джаджи в собствен код?   -  person hyde    schedule 15.07.2016
comment
първо трябва да създадете обект на оформление според изискването, проверете тази връзка   -  person Atul N    schedule 15.07.2016
comment
Може ли да проверите моята редакция, опитах се да бъда по-точен.   -  person carobnodrvo    schedule 15.07.2016


Отговори (1)


Използвайте QGridLayout, за да зададете позицията на изпълнимия модул:

QGridLayout* layout = new QGridLayout(this);
// 2x2 layout
QWidget* green = new QWidget(this);
green->setStyleSheet("background:green;");
QWidget* yellow = new QWidget(this);
yellow->setStyleSheet("background:yellow;");
QWidget* red = new QWidget(this);
red->setStyleSheet("background:red;");
QWidget* blue = new QWidget(this);
blue->setStyleSheet("background:blue;");
layout->addWidget(green, 0, 0); // Top-Left
layout->addWidget(yellow, 0, 1); // Top-Right
layout->addWidget(red, 1, 0); // Bottom-Left
layout->addWidget(blue, 1, 1); // Bottom-Right
ui->centralWidget->setLayout(layout);

Ще ви даде нещо подобно:

въведете описание на изображението тук

И така, персонализирайте своя собствена джаджа с помощта на QGridLayout и задайте позицията на вашата джаджа вътре в нея.

Задайте друга джаджа като родител с черен фон:

QGridLayout* layout = new QGridLayout(this);
// 2x2 layout
QWidget* green = new QWidget(this);
green->setStyleSheet("background:green;");
QWidget* yellow = new QWidget(this);
yellow->setStyleSheet("background:yellow;");
QWidget* red = new QWidget(this);
red->setStyleSheet("background:red;");
QWidget* blue = new QWidget(this);
blue->setStyleSheet("background:blue;");
layout->addWidget(green, 0, 0); // Top-Left
layout->addWidget(yellow, 0, 1); // Top-Right
layout->addWidget(red, 1, 0); // Bottom-Left
layout->addWidget(blue, 1, 1); // Bottom-Right

QWidget* mainWidget = new QWidget(this);
mainWidget->setStyleSheet("background:black;");
mainWidget->setLayout(layout);

QHBoxLayout* centralLayout = new QHBoxLayout(this);
centralLayout->addWidget(mainWidget);
ui->centralWidget->setLayout(centralLayout);

въведете описание на изображението тук

person mohabouje    schedule 15.07.2016
comment
Основното нещо, което се опитвам да постигна е, че имам една джаджа (Widget1 в изображението) и друга джаджа върху нея (Widget2 в изображението). - person carobnodrvo; 15.07.2016
comment
ui-›centralWidget е основната ви джаджа, а останалите са над нея. Добавих нов пример с родителска джаджа с черен фон и другата над нея - person mohabouje; 15.07.2016
comment
Благодаря, това беше полезно, единственото нещо сега е, че имам само 1 джаджа (напр. долу вляво) и тя е разпъната по цялата ширина/височина и изглежда, че не мога да я преоразмеря. Знаете ли как мога да разреша това? - person carobnodrvo; 15.07.2016
comment
Проверете QSplitter, за да направите оформление с възможност за промяна на размера doc.qt.io/qt-5/qsplitter.html - person mohabouje; 15.07.2016
comment
Пазете се колега S.O. Гражданино, тази публикация е пропаганда на Microsoft! (orig05.deviantart.net/e2b8/f /2012/035/f/7/) - person Lennart Rolland; 17.07.2016