Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Chuzhik от Июнь 17, 2013, 12:29



Название: Отсоединяющиеся Tab'ы в QTabWidget
Отправлено: Chuzhik от Июнь 17, 2013, 12:29
Столкнулся с проблемой, которую не могу решить уже несколько дней.
Возможно просто не хватает фантазии.

Имеется некоторый GUI. В нём на QTabWidget динамически создаются вкладки некоторых модулей, появилась необходимость сделать эти странички отсоединяемыми, аля QDockWidget, но без существенных изменений внешнего вида (пользователей жалко).

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

есть хоть что-то штатное в Qt4 для этого?

пока даже элементарно не могу найти соответствующих сигналов-слотов...

хотелось бы решить задачу "малой кровью", не рубить уже устоявшуюся архитектуру.

Помогите советом, пожалуйста))


Название: Re: Отсоединяющиеся Tab'ы в QTabWidget
Отправлено: Странник от Июнь 17, 2013, 14:10
если я правильно понял вашу задачу, вам необходимо обрабатывать дроп на "свободную область экрана". насколько я знаю, средствами Qt это не решается.


Название: Re: Отсоединяющиеся Tab'ы в QTabWidget
Отправлено: Bepec от Июнь 17, 2013, 14:17
Как не решается? До тех пор, пока он не дропнул, события приходят :)

Просто нужно создать виджет одновременно с удалением таба из tabWidget и перемещать вслед за мышкой.


Название: Re: Отсоединяющиеся Tab'ы в QTabWidget
Отправлено: Chuzhik от Июнь 17, 2013, 14:20
если я правильно понял вашу задачу, вам необходимо обрабатывать дроп на "свободную область экрана". насколько я знаю, средствами Qt это не решается.

Да, Вы меня правильно поняли. Я так и думал, спасибо. Сейчас унаследывал от QTabWidget и от QTabBar два своих класса, пытаюсь разобраться. Невозможного нет, просто я не могу понять какой алгоритм должен быть реализован для отсоединения вкладки в отдельное окно, как опытный разработчик, поправьте меня:

По двойному щелчку мыши по вкладке, основной виджет долженсоздать окно (док, например) и передать этому окну указатель на виджет, установленный в выбраной вкладке, а вкладку нужно спрятать. Например.

Это только что пришло в голову и пока очень сумбурно, как Вы думаете, это быдло-путь? или это имеет право на жизнь?


Название: Re: Отсоединяющиеся Tab'ы в QTabWidget
Отправлено: Chuzhik от Июнь 17, 2013, 14:21
Как не решается? До тех пор, пока он не дропнул, события приходят :)

Просто нужно создать виджет одновременно с удалением таба из tabWidget и перемещать вслед за мышкой.

как Вы меня опередили) А можно ли при этом сохранить обращения к перемещаемому виджету как ко вкладке?

по айди вкладки в QTabWidget?


Название: Re: Отсоединяющиеся Tab'ы в QTabWidget
Отправлено: Bepec от Июнь 17, 2013, 14:28
Не получится. Или вкладка, или виджет. Да и зачем вам такое "поведение"?

Алгоритм -
1) действие пользователя (перетаскивание)
2) создание нового tabWidget.
3) добавление в tabWidget переносимой вкладки.
4) перемещение за курсором мыши (пока пользун не отожмёт клавишу)
5) анализ дропа, если за пределы родного окна, то оставляем всё как есть, если на окне, то переносим вкладку обратно, tabWidget новый удаляем.


Название: Re: Отсоединяющиеся Tab'ы в QTabWidget
Отправлено: Chuzhik от Июнь 17, 2013, 14:37
Да и зачем вам такое "поведение"?


Очень просто, природная лень) просто взаимодействие страниц (расположенных на вкладках), так уж исторически сложилось, завязанно на айди табов. но да. я уже понял, что придётся менять.

Спасибо) я примерно понял. Буду пробовать)


Название: Re: Отсоединяющиеся Tab'ы в QTabWidget
Отправлено: Bepec от Июнь 20, 2013, 09:41
Вы можете поведение переписать, основываясь на айди табов, которые будут сохраняться в мапе. Чуть сложнее, но зато никаких особых проблем не будет.


Название: Re: Отсоединяющиеся Tab'ы в QTabWidget
Отправлено: YvenTitan от Февраль 08, 2017, 14:24
За 4 года появилось в QT что-то штатное?


Название: Re: Отсоединяющиеся Tab'ы в QTabWidget
Отправлено: kai666_73 от Февраль 08, 2017, 19:28
Ну если только вместо tabwidget-а изначально задействовать dockwidget-ы (по штуке на каждую вкладку таба)...
Вроде, все что нужно есть... штатно )