Russian Qt Forum
Ноябрь 22, 2024, 14:04
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Вкладки как в браузерах
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Вкладки как в браузерах (Прочитано 9120 раз)
maksimAstraLin
Гость
Вкладки как в браузерах
«
:
Август 15, 2017, 12:42 »
Здравствуйте.
Подскажите, пожалуйста, где можно найти информацию, на что следует обратить внимание, какие могут встретиться подводные камни, и вообще, выполнима ли вот такая задача:
В основном окне приложения пользователь будет запускать отдельные процессы-подзадачи. Для каждого процесса должна создаваться вкладка, например, на QTabWidget. Нужно сделать возможным перетаскивание этих вкладок в отдельные окна, между этими окнами и обратно в главное окно подобно тому, как происходит перетаскивание вкладок в браузерах.
Операционная система: Astra Linux
Среда разработки: Qt Creator и Qt Designer.
С уважением, Максим.
Записан
Bepec
Гость
Re: Вкладки как в браузерах
«
Ответ #1 :
Август 15, 2017, 15:32 »
Возможно, но вам необходим ещё какой-то функционал, подозреваю. Подзадачный. Так что приложения должны поддерживать как минимум общение.
Записан
maksimAstraLin
Гость
Re: Вкладки как в браузерах
«
Ответ #2 :
Август 15, 2017, 15:43 »
Цитата: Bepec от Август 15, 2017, 15:32
... необходим ещё какой-то функционал, ...
А для того, чтобы вкладки QTabWidget функционировали описанным способом это тоже понадобится, правильно я понял?
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Вкладки как в браузерах
«
Ответ #3 :
Август 15, 2017, 16:25 »
ну, надо будет иметь возможность поменять контроллера процесса, чтобы он общался с другой вкладкой (в другом приложении) и не умирал, когда умрет тот, кто его создал изначально.
Записан
maksimAstraLin
Гость
Re: Вкладки как в браузерах
«
Ответ #4 :
Август 15, 2017, 16:32 »
Цитата: Авварон от Август 15, 2017, 16:25
... поменять контроллера процесса, ...
Буду признателен, если подскажете, где об этом можно почитать.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Вкладки как в браузерах
«
Ответ #5 :
Август 15, 2017, 16:42 »
Сперва, нужно организовать межпроцессное взаимодейстие. Либо сокеты, либо пайп, либо unix-сигналы. Обычно первое юзают, насколько мне известно.
Чтобы процесс не умирал, надо погуглить - либо можно запускать его демоном сразу (тогда парент процесса - демон и пофиг в какой он вкладке), либо менять парента. Что для венды, яхз, никогда не писал процессы в венде.
Записан
maksimAstraLin
Гость
Re: Вкладки как в браузерах
«
Ответ #6 :
Август 15, 2017, 16:48 »
Благодарю. Начну углублять знания по сокетам и демонам.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Вкладки как в браузерах
«
Ответ #7 :
Август 15, 2017, 17:11 »
ну поменять парента кажется проще)
Записан
xokc
Птица говорун
Offline
Сообщений: 976
Re: Вкладки как в браузерах
«
Ответ #8 :
Август 29, 2017, 13:26 »
А никто не пробовал код какого-нибудь из браузеров "препарировать" для изъятия из него подобного функционала?
Записан
Bepec
Гость
Re: Вкладки как в браузерах
«
Ответ #9 :
Август 29, 2017, 14:05 »
Это всё щедро приправлено всем навесным функционалом. И для отделения зёрен от плевел придётся придётся изучать весь проект целиком
Слишком большая работа для столь простого вопроса
Записан
deMax
Хакер
Offline
Сообщений: 600
Re: Вкладки как в браузерах
«
Ответ #10 :
Август 29, 2017, 14:21 »
Цитата: Bepec от Август 29, 2017, 14:05
Это всё щедро приправлено всем навесным функционалом. И для отделения зёрен от плевел придётся придётся изучать весь проект целиком
Слишком большая работа для столь простого вопроса
ИМХО, браузер просто создает новый процесс и перебрасывает в него загруженные данные.
Записан
Bepec
Гость
Re: Вкладки как в браузерах
«
Ответ #11 :
Август 30, 2017, 00:57 »
Угу. Перебрасывает. Но при этом оставляет возможность изменения, доступа и модификации этих данных из основного приложения
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Вкладки как в браузерах
«
Ответ #12 :
Август 30, 2017, 13:29 »
В разных браузерах по-разному. Например, сафари создает один процесс на весь веб-контент, а хром - на каждую вкладку.
Записан
maksimAstraLin
Гость
Re: Вкладки как в браузерах
«
Ответ #13 :
Сентябрь 13, 2017, 08:58 »
Всем доброго дня!
С процессами пока не разобрался, но вот что получилось сделать со вкладками:
Я создал наследника QApplication. В нем - контейнер указателей на все создаваемые окна программы и слот создания нового окна. В этом наследнике я установил eventFilter на this. В классе основного окна я установил eventFilter на объект QTabBar моего QTabWidget.
Когда MainWindow понимает, что пора начинать перетаскивание, создается объект перетаскивания, посредством сигнала наследнику QApplication передается указатель на виджет вкладки и ее название и далее запускается перетаскивание: (QDrag*) drag->exec(Qt::MoveAction).
В MainWindow::dropEvent() обрабатывается отпускание на другую вкладку и на виджет открытой вкладки (в этом случае перетаскиваемая вкладка возвращается в QTabWidget). Если пользователь бросил вкладку в любое другое место окна - срабатывает сигнал создания нового окна.
Наследник QApplication отслеживает событие перетаскивания вкладки на пространство, свободное от окон программы. Если пользователь бросит вкладку во вне, сработает событие QEvent::ChildRemoved и будет выдан сигнал создания нового окна.
Каждый раз при создании нового окна вызывается сигнал для закрытия окон, в которых не осталось вкладок: соответствующий слот перебирает контейнер окон, закрывает нужные окна и убирает указатель из контейнера.
Память при закрытии окна освобождается, благодаря атрибуту:
(MainWindow*) this->setAttribute(Qt::WA_DeleteOnClose).
Слот создания окна принимает два параметра: указатель на видежт вкладки и название вкладки. Он создает окно (такое же, как главное), добавляет указатель на него в контейнер, создает вкладку с указанными виджетом и названием и отображает окно.
PS: Допускаю, что, когда я разберусь с процессами, этот алгоритм работы придется переделать.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...