LINUX.ORG.RU

Qt приложение с возможностью перетаскивать виджеты

 


0

3

Всем добрый день! Ребята, подскажите пожалуйста, как сделать так, чтобы при старте все виджеты располагались в основном окне, но можно было виджеты перетаскивать, чтобы они были как отдельные окна. Как в «фотошопе». Расположение виджетов основного окна по ссылке: https://drive.google.com/file/d/11NkHLHssTmYAmaKc4liFR6OMJvUpdDJb/view?usp=sharing

Сейчас эксперементирую с QDockWidget. Создаю и загружаю виджеты так:

	QDockWidget *dock2 = new QDockWidget(this);
	dock2->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
	dock2->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);
	dock2->setWidget(ui->widgetLinePlot0);
	dock2->show();

	QDockWidget *dock3 = new QDockWidget(this);
	dock3->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
	dock3->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);
	dock3->setWidget(ui->widgetLinePlot1);
	dock3->show();

	QDockWidget *dock4 = new QDockWidget(this);
	dock4->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
	dock4->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable);
	dock4->setWidget(ui->widgetLinePlot2);
	dock4->show();

В Qt не силен. Подскажите направление,как проще решить данную задачу. Буду балгодарен за фрагмент кода, с данным функционалом. Благодарю за помощь.


Подскажите направление,как проще решить данную задачу.

Копать в сторону:

http://doc.qt.io/qt-5/qtwidgets-mainwindows-dockwidgets-example.html

Или в сторону:

http://doc.qt.io/qt-5/qtwidgets-mainwindows-mainwindow-example.html

Эти примеры обычно есть в поставке с Qt, это зависит от дистрибутива. См. https://packages.debian.org/jessie/qtbase5-examples, например.

EXL ★★★★★
()

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

ncuxer
()
Ответ на: комментарий от ncuxer

Можете хотя бы в стрелочках или списке используемых классов пояснить как использовать QGraphicsScene. Я конечно же почитаю, об этом. Благодарю.

karak
() автор топика
Ответ на: комментарий от karak

Еще раз перечитал исходное сообщение и понял, что неправильно понял задачу. Прошу прощения, тут скорее всего QDockWidget и нужен, да. QGraphicsView использовал для перетаскивания контролов и объектов по «сцене».

ncuxer
()
Ответ на: комментарий от ncuxer

Ребята, спасибо всем, кто откликнулся. Почитал код примеров. Получил то, что нужно. Я почти все сделал правильно, кроме вызовов setCentralWidet() и addDockWidget(). Не знаю как закрыть тему.

karak
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.