Название: Создание списка Layout Отправлено: Ced от Апрель 29, 2017, 20:46 Коллеги, есть необходимость создать на экране некоторое, наперед неизвестное количество списков с возможностью выбора элементов.
В каждом списке нужны как минимум две кнопки: "Выбрать все" и "Отменить выбор". Хотел создать List<Класс списка>, но натолкнулся на проблему: В классе списка нужен QObject, чтобы сделать слоты для кнопок. Для создания списка нужен конструктор копирования. Как я понял, для класса, наследующего QObject, таковой не возможен. Есть какие-нибудь решения для такой задачи? Название: Re: Создание списка Layout Отправлено: Ced от Апрель 29, 2017, 21:17 Может конструктору копирования можно как-то растолковать, что я не хочу копировать QObject?. В копии моего класса меня бы устроил новый экземпляр.
Название: Re: Создание списка Layout Отправлено: Ced от Апрель 29, 2017, 21:26 Кажется я нашел решение. Сейчас попробую и отпишу.
Название: Re: Создание списка Layout Отправлено: Ced от Апрель 29, 2017, 22:42 Увы, не сработало. Продолжаю ждать советов.
Название: Re: Создание списка Layout Отправлено: kambala от Апрель 30, 2017, 00:07 ничего не понятно. это должен быть виджет, содержащий в себе список и 2 кнопки?
Название: Re: Создание списка Layout Отправлено: Ced от Апрель 30, 2017, 10:45 Не совсем так. Виджет должен содержать набор списков, количество которых наперед не известно. Каждый из списков набора должен содержать две кнопки.
Наверно вот еще, что важно: списки приходят из сокета в непредсказуемые моменты времени. По приходу к каждому списку должны цепляться кнопки и вся эта конструкция добавляться в виджет. Название: Re: Создание списка Layout Отправлено: ViTech от Апрель 30, 2017, 10:58 Из простого: попробуйте хранить в List не "Класс списка", а указатель на него. Может даже какой-нибудь умный.
Название: Re: Создание списка Layout Отправлено: Ced от Апрель 30, 2017, 11:00 Из простого: попробуйте хранить в List не "Класс списка", а указатель на него. Может даже какой-нибудь умный. Если хранить указатель, то сам список тоже где-то должен существовать. А как обеспечить создание самих объектов, если количество их наперед не известно без массива переменной длины? Название: Re: Создание списка Layout Отправлено: Igors от Апрель 30, 2017, 11:58 Хотел создать List<Класс списка>, но натолкнулся на проблему: Т.е. при нажатии кнопки Вы хотите посылать тучу сигналов (каждому айтему). В этом нет никакой необходимости, гораздо проще айтему ставить флажок (см QTreeWidgetItem или QTableWidgetItem)В классе списка нужен QObject, чтобы сделать слоты для кнопок. Если хранить указатель, то сам список тоже где-то должен существовать. А как обеспечить создание самих объектов, если количество их наперед не известно без массива переменной длины? Допустим пришла команда "создать 100 объектов". Значит надо 100 раз сделать new и каждый указатель передать новому айтему. Конечно если это нужно (сейчас нет) Название: Re: Создание списка Layout Отправлено: Ced от Апрель 30, 2017, 12:07 Хотел создать List<Класс списка>, но натолкнулся на проблему: Т.е. при нажатии кнопки Вы хотите посылать тучу сигналов (каждому айтему). В этом нет никакой необходимости, гораздо проще айтему ставить флажок (см QTreeWidgetItem или QTableWidgetItem)В классе списка нужен QObject, чтобы сделать слоты для кнопок. Флажки у каждого итема - само собой. Но если их несколько десятков? Без кнопок мультивыбора пользователь меня проклянет. Если хранить указатель, то сам список тоже где-то должен существовать. А как обеспечить создание самих объектов, если количество их наперед не известно без массива переменной длины? Допустим пришла команда "создать 100 объектов". Значит надо 100 раз сделать new и каждый указатель передать новому айтему. Конечно если это нужно (сейчас нет) [/quote] А если команды "Создать объект" приходят по одной с интервалом скажем минут 10? И когда закончат приходить, не известно. Название: Re: Создание списка Layout Отправлено: kambala от Апрель 30, 2017, 12:40 Каждый из списков набора должен содержать две кнопки. так я о таком списке из набора и говорил :) это ж просто QList(View|Widget) с двумя кнопками, который помещается в QScrollArea-контейнер (на экран все могут и не влезть).Название: Re: Создание списка Layout Отправлено: Igors от Апрель 30, 2017, 12:44 Флажки у каждого итема - само собой. Но если их несколько десятков? Без кнопок мультивыбора пользователь меня проклянет. Так Вы же можете их и из приложения ставить (не только юзер руками)А если команды "Создать объект" приходят по одной с интервалом скажем минут 10? И когда закончат приходить, не известно. Пишете ф-цию/метод которая выполняет это создание, ну и она вызывается любое кол-во раз с любым интерваломНазвание: Re: Создание списка Layout Отправлено: Ced от Апрель 30, 2017, 15:21 Флажки у каждого итема - само собой. Но если их несколько десятков? Без кнопок мультивыбора пользователь меня проклянет. Так Вы же можете их и из приложения ставить (не только юзер руками) А если команды "Создать объект" приходят по одной с интервалом скажем минут 10? И когда закончат приходить, не известно. Пишете ф-цию/метод которая выполняет это создание, ну и она вызывается любое кол-во раз с любым интервалом[/quote] Если после завершения метода объект должен существовать и дальше, значит он должен быть объявлен вне метода. А локальные объекты исчезают вместе с методами, их создавшими. И объектов этих должен быть массив переменной длины, коим и является список. Но список не допускает включения объектов, наследованных от QObject. Название: Re: Создание списка Layout Отправлено: kambala от Апрель 30, 2017, 16:05 Но список не допускает включения объектов, наследованных от QObject. указатели на QObject допускает, вроде ж писали уже об этомНазвание: Re: Создание списка Layout Отправлено: Igors от Апрель 30, 2017, 16:13 И объектов этих должен быть массив переменной длины, коим и является список. Но список не допускает включения объектов, наследованных от QObject. Знову за рибу грошi :'( Самое простое - унаследоваться от айтема, напрКод Ну и набиваете табличку такими MyItem'ами в которых сидят указатели на объекты. Удалили айтем - удалился и объект. Хотя не знаю зачем тот QObject понадобился Название: Re: Создание списка Layout Отправлено: Ced от Апрель 30, 2017, 16:27 Хотя не знаю зачем тот QObject понадобился Так за тем и понадобился, что к каждому такому дереву нужно приспособить минимум по две кнопки. Название: Re: Создание списка Layout Отправлено: Ced от Апрель 30, 2017, 16:28 Но список не допускает включения объектов, наследованных от QObject. указатели на QObject допускает, вроде ж писали уже об этомНу и толку? В классе, содержащем указатель не получится объявить connect. Название: Re: Создание списка Layout Отправлено: Igors от Апрель 30, 2017, 17:04 Так за тем и понадобился, что к каждому такому дереву нужно приспособить минимум по две кнопки. Ну и приспосабливайте, и по нажатию на кнопку установите всем айтемам флажок selected, для этого QObject не требуетсяНазвание: Re: Создание списка Layout Отправлено: kambala от Апрель 30, 2017, 17:21 Но список не допускает включения объектов, наследованных от QObject. указатели на QObject допускает, вроде ж писали уже об этомНу и толку? В классе, содержащем указатель не получится объявить connect. Название: Re: Создание списка Layout Отправлено: Ced от Апрель 30, 2017, 17:29 Так за тем и понадобился, что к каждому такому дереву нужно приспособить минимум по две кнопки. Ну и приспосабливайте, и по нажатию на кнопку установите всем айтемам флажок selected, для этого QObject не требуетсяА как я буду отслеживать нажатие кнопки без отлова сигнала clicked()? Название: Re: Создание списка Layout Отправлено: Ced от Апрель 30, 2017, 17:32 Но список не допускает включения объектов, наследованных от QObject. указатели на QObject допускает, вроде ж писали уже об этомНу и толку? В классе, содержащем указатель не получится объявить connect. Скорее не понимаю я. НО все же. Я понимаю так: чтобы иметь возможность пользоваться механизмом сигналов и слотов, класс должен наследовать QObject. Наличие в классе ссылки на объект QObjecn не дает такой возможности. Я не прав? Название: Re: Создание списка Layout Отправлено: kambala от Апрель 30, 2017, 18:11 можно приконнектить прямо к этой ссылке, если это подходит. хотя теперь непонятно почему нельзя сделать сам класс наследником QObject и хранить указатель на него в своем главном списке...
можешь еще раз нормально описать как должно выглядеть то, что ты хочешь? разве это не оно? Каждый из списков набора должен содержать две кнопки. так я о таком списке из набора и говорил :) это ж просто QList(View|Widget) с двумя кнопками, который помещается в QScrollArea-контейнер (на экран все могут и не влезть).Название: Re: Создание списка Layout Отправлено: Igors от Апрель 30, 2017, 18:22 А как я буду отслеживать нажатие кнопки без отлова сигнала clicked()? Так clicked надо коннектить к таблице (которая уже наследник QObject) - а не к каждому айтемуНазвание: Re: Создание списка Layout Отправлено: Igors от Апрель 30, 2017, 18:32 Наличие в классе ссылки на объект QObjecn не дает такой возможности. Непосредственной нет, не дает. Вы можете сконнектиться с указателем/ccылкой членом класса (владельца), но сигналы будет получать не сам владелец а объект по указателю/ссылке. Но он может обращаться к владельцу Название: Re: Создание списка Layout Отправлено: Ced от Апрель 30, 2017, 23:32 Наличие в классе ссылки на объект QObjecn не дает такой возможности. Непосредственной нет, не дает. Вы можете сконнектиться с указателем/ccылкой членом класса (владельца), но сигналы будет получать не сам владелец а объект по указателю/ссылке. Но он может обращаться к владельцу Спасибо. Наверно это решает проблему. |