Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
2 / 2 / 0
Регистрация: 24.03.2020
Сообщений: 16
PyQt5

Singleton

23.06.2020, 22:21. Показов 1816. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Столкнулся со следующей проблемой. Есть QTabWidget. В нём есть несколько вкладок. В каждой вкладке один виджет должен повторяться. Это составной виджет, состоящий из кнопки и таблицы. Проблема в том, что виджет должен быть одинаковым везде. То есть в одной из вкладок его заполнили, а в других он должен отображаться с таким же содержанием. Я пришел к выводу, что необходим паттерн Singleton. Я его применил, однако виджет отрисовывается только в одной вкладке, в других наблюдается пустота. Помогите, пожалуйста, решить данную проблему.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.06.2020, 22:21
Ответы с готовыми решениями:

Создание "Singleton" так, чтобы при повторной инициализации нельзя было измениять атрибуты объекта
Всем привет, для одной задачи потребовался singleton, но такой, чтобы не просто второго объекта не было, но и что бы при повторной...

Collections: singleton/singletonList/singletonMap. Что значит слово singleton?
Заметил, что в классе Collections (утилитный класс) имеются методы для оборачивания элемента в set/list/map Все эти методы содержат в...

Syntax error: Operator expected, Singleton variables: [RverseList,ReverseList], Singleton variables: [L,N1]
p3(X/ ). p3(X, ) :- p3(X, Tail). reverse(List, ReverseList):- reverse(List, , ReverseList). reverse(, Buffer, Buffer):-!. ...

10
 Аватар для kapbepucm
1567 / 740 / 321
Регистрация: 02.05.2020
Сообщений: 1,659
25.06.2020, 14:16
При переключении закладок убирать этот виджет из текущей закладки и добавлять на вновь выбранную
1
2 / 2 / 0
Регистрация: 24.03.2020
Сообщений: 16
25.06.2020, 14:47  [ТС]
kapbepucm, хм, да, скорее всего такое сработает. Это не сильно увеличит время переключения? Ведь надо делать два дополнительных действия каждый раз - убрать и добавить.
0
 Аватар для kapbepucm
1567 / 740 / 321
Регистрация: 02.05.2020
Сообщений: 1,659
25.06.2020, 15:04
Цитата Сообщение от DeusOfLearning Посмотреть сообщение
Это не сильно увеличит время переключения?
Зависит от "нагруженности" вашего составного виджета.

Ещё вариант, размещать этот виджет отдельно от QTabWidget (за его пределами). Но это не поможет, если он должен быть гдето в центре.
1
2 / 2 / 0
Регистрация: 24.03.2020
Сообщений: 16
25.06.2020, 19:26  [ТС]
kapbepucm, благодарю за ответ. Он состоит их трёх элементов, один из который QTableWidget. Думаю, это не самый оптимальный вариант. А Вы можете пояснить почему так происходит? С точки зрения реализации получается, что виджет добавляется одновременно в две вкладки. И получается, что отрисовывается он только для одной вкладки, для другой просто забивает по какой-то причине.
0
 Аватар для kapbepucm
1567 / 740 / 321
Регистрация: 02.05.2020
Сообщений: 1,659
26.06.2020, 09:18
Цитата Сообщение от DeusOfLearning Посмотреть сообщение
С точки зрения реализации получается, что виджет добавляется одновременно в две вкладки. И получается, что отрисовывается он только для одной вкладки, для другой просто забивает по какой-то причине.
Ну почему же? По сути, каждая страничка- это отдельный QWidget. И добавляете новый элемент не на все QWidget-ы, а на определённый.
0
2 / 2 / 0
Регистрация: 24.03.2020
Сообщений: 16
26.06.2020, 13:29  [ТС]
kapbepucm, нет, Ваша реализация понятна, я имел в виду, проблему, которую я описал в начале, почему так происходит, что отображается только в одной вкладке (в которую виджет был вставлен в последний раз), а в других нет. Я так понял, что один и тот же виджет может только один раз встречаться в виде дочернего элемента для другого виджета.
0
 Аватар для kapbepucm
1567 / 740 / 321
Регистрация: 02.05.2020
Сообщений: 1,659
26.06.2020, 14:02
емм... я описывал не свою реализацию, а устройство любого QTabWidget
вкладки-контейнеры не связаны друг с ругом- это разные экземпляры QWidget

Цитата Сообщение от DeusOfLearning Посмотреть сообщение
С точки зрения реализации получается, что виджет добавляется одновременно в две вкладки.
это утверждение неверно
0
2 / 2 / 0
Регистрация: 24.03.2020
Сообщений: 16
26.06.2020, 16:06  [ТС]
kapbepucm,
Цитата Сообщение от kapbepucm Посмотреть сообщение
вкладки-контейнеры не связаны друг с ругом- это разные экземпляры QWidget
Это очевидно, только я не об этом, Вы просто предлагаете перебрасывать один и тот же виджет в разные вкладки. И поясните, пожалуйста, что Вы имеете в виду под реализацией в данном случае? Только лишь то, что вкладки не связаны?

Цитата Сообщение от kapbepucm Посмотреть сообщение
это утверждение неверно
Что именно неверно? И почему? Если Вы про то, что они добавляются, то да, по факту этого не происходит, так выглядит ситуация в коде, но в действительности этого не происходит, виджет находится только в одной вкладке.

Также добавлю, что нашел другое решение. Не очень эффективное по памяти, но по скорости лучше. Я сделал Singleton не сам виджет, а конкретно модель данных (определил наследника для QAbstractTableModel) для QTableView. Идея не моя, нашел в инете. Если кто-то столкнется с подобной проблемой, может, поможет.
0
 Аватар для kapbepucm
1567 / 740 / 321
Регистрация: 02.05.2020
Сообщений: 1,659
26.06.2020, 21:07
Лучший ответ Сообщение было отмечено DeusOfLearning как решение

Решение

А если этот виджет вообще не связывать с QTabWiget, скажем, отображать всегда поверх него? В том месте (в контейнерах-вкладках), где он должен был бы находится поместить какой нибудь пустой QWidget и синхронизировать их геометрию, например, при изменении рамеров главного окна.
Цитата Сообщение от DeusOfLearning Посмотреть сообщение
Что именно неверно? И почему?
это IMHO, прошу сильно не пинать за него
1
2 / 2 / 0
Регистрация: 24.03.2020
Сообщений: 16
26.06.2020, 21:40  [ТС]
kapbepucm,
Цитата Сообщение от kapbepucm Посмотреть сообщение
это IMHO, прошу сильно не пинать за него
Даже не собирался

Цитата Сообщение от kapbepucm Посмотреть сообщение
А если этот виджет вообще не связывать с QTabWiget, скажем, отображать всегда поверх него?
Да, думаю, можно, с точки зрения оптимизации, Ваш вариант будет самым лучшим - по времени и по памяти. Но боюсь, что всё несколько сложнее - мне, наверное, стоило подробнее описать. Ещё раз - есть QTabWidget, соответственно, у него есть вкладки. В каждой вкладки (я сегодня немного поменял логику) есть теперь ещё один QTabWidget. А вот одна из вкладок последнего содержит в себе этот виджет, который как раз и повторяется во вкладках первого QTabWidget. Да, Вашу идею можно реализовать, но в таком случае выглядеть это будет немного страшновато - придется подключать лишний слот для скрытия/показа это виджета и ещё придется вероятно что-то делать. Боюсь, что так может получиться спагетти-код.

Благодарю ещё раз за ответы. Ваша последняя идея, наверное, самая лучшая по времени и памяти из тех, что я знаю. Пока оставлю так, как сделал, а на этапе рефакторинга/оптимизации попробую подобное провернуть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.06.2020, 21:40
Помогаю со студенческими работами здесь

Что значит Singleton& operator = ( Singleton& )?
// Singleton.h class Singleton { private: static Singleton * p_instance; // Конструкторы и оператор присваивания...

Singleton
Всем доброе время суток! У меня возникла одна проблема в классе Singleton у меня описана одна функция которую надо сделать private. ...

Singleton
Всем привет... не могу сообразить почему делают так: public class Singleton { private static volatile Singleton instance; ...

Singleton
Буду краток. Пропустил пару по Singleton( это только первое занятие было по паттернам). Дали лабу по singleton , а я ничего не пойму....

Singleton
Привет. Прошу помочь в решении такои задачи. Перевод немножко кривой. Если можно, то с пояснениями. Спасибо создать класс, который...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru