Russian Qt Forum
Ноябрь 24, 2024, 05:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Создание списка Layout  (Прочитано 9961 раз)
Ced
Гость
« : Апрель 29, 2017, 20:46 »

Коллеги, есть необходимость создать на экране некоторое, наперед неизвестное количество списков с возможностью выбора элементов.
В каждом списке нужны как минимум две кнопки: "Выбрать все" и "Отменить выбор".
Хотел создать List<Класс списка>, но натолкнулся на проблему:
В классе списка нужен QObject, чтобы сделать слоты для кнопок. Для создания списка нужен конструктор копирования. Как я понял, для класса, наследующего QObject, таковой не возможен.
Есть какие-нибудь решения для такой задачи?
Записан
Ced
Гость
« Ответ #1 : Апрель 29, 2017, 21:17 »

Может конструктору копирования можно как-то растолковать, что я не хочу копировать QObject?. В копии моего класса меня бы устроил новый экземпляр.
« Последнее редактирование: Апрель 29, 2017, 21:19 от Ced » Записан
Ced
Гость
« Ответ #2 : Апрель 29, 2017, 21:26 »

Кажется я нашел решение. Сейчас попробую и отпишу.
Записан
Ced
Гость
« Ответ #3 : Апрель 29, 2017, 22:42 »

Увы, не сработало. Продолжаю ждать советов.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Апрель 30, 2017, 00:07 »

ничего не понятно. это должен быть виджет, содержащий в себе список и 2 кнопки?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Ced
Гость
« Ответ #5 : Апрель 30, 2017, 10:45 »

Не совсем так. Виджет должен содержать набор списков, количество которых наперед не известно. Каждый из списков набора должен содержать две кнопки.
Наверно вот еще, что важно: списки приходят из сокета в непредсказуемые моменты времени. По приходу к каждому списку должны цепляться кнопки и вся эта конструкция добавляться в виджет.
« Последнее редактирование: Апрель 30, 2017, 10:57 от Ced » Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #6 : Апрель 30, 2017, 10:58 »

Из простого: попробуйте хранить в List не "Класс списка", а указатель на него. Может даже какой-нибудь умный.
Записан

Пока сам не сделаешь...
Ced
Гость
« Ответ #7 : Апрель 30, 2017, 11:00 »

Из простого: попробуйте хранить в List не "Класс списка", а указатель на него. Может даже какой-нибудь умный.

Если хранить указатель, то сам список тоже где-то должен существовать. А как обеспечить создание самих объектов, если количество их наперед не известно без массива переменной длины?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Апрель 30, 2017, 11:58 »

Хотел создать List<Класс списка>, но натолкнулся на проблему:
В классе списка нужен QObject, чтобы сделать слоты для кнопок.
Т.е. при нажатии кнопки Вы хотите посылать тучу сигналов (каждому айтему). В этом нет никакой необходимости, гораздо проще айтему ставить флажок (см QTreeWidgetItem или QTableWidgetItem)

Если хранить указатель, то сам список тоже где-то должен существовать. А как обеспечить создание самих объектов, если количество их наперед не известно без массива переменной длины?
Допустим пришла команда "создать 100 объектов". Значит надо 100 раз сделать new и каждый указатель передать новому айтему. Конечно если это нужно (сейчас нет) 
Записан
Ced
Гость
« Ответ #9 : Апрель 30, 2017, 12:07 »

Хотел создать List<Класс списка>, но натолкнулся на проблему:
В классе списка нужен QObject, чтобы сделать слоты для кнопок.
Т.е. при нажатии кнопки Вы хотите посылать тучу сигналов (каждому айтему). В этом нет никакой необходимости, гораздо проще айтему ставить флажок (см QTreeWidgetItem или QTableWidgetItem)

Флажки у каждого итема - само собой. Но если их несколько десятков? Без кнопок мультивыбора пользователь меня проклянет.

Если хранить указатель, то сам список тоже где-то должен существовать. А как обеспечить создание самих объектов, если количество их наперед не известно без массива переменной длины?
Допустим пришла команда "создать 100 объектов". Значит надо 100 раз сделать new и каждый указатель передать новому айтему. Конечно если это нужно (сейчас нет)  
[/quote]

А если команды "Создать объект" приходят по одной с интервалом скажем минут 10? И когда закончат приходить, не известно.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #10 : Апрель 30, 2017, 12:40 »

Каждый из списков набора должен содержать две кнопки.
так я о таком списке из набора и говорил Улыбающийся это ж просто QList(View|Widget) с двумя кнопками, который помещается в QScrollArea-контейнер (на экран все могут и не влезть).
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Апрель 30, 2017, 12:44 »

Флажки у каждого итема - само собой. Но если их несколько десятков? Без кнопок мультивыбора пользователь меня проклянет.
Так Вы же можете их и из приложения ставить (не только юзер руками)

А если команды "Создать объект" приходят по одной с интервалом скажем минут 10? И когда закончат приходить, не известно.
Пишете ф-цию/метод которая выполняет это создание, ну и она вызывается любое кол-во раз с любым интервалом
Записан
Ced
Гость
« Ответ #12 : Апрель 30, 2017, 15:21 »

Флажки у каждого итема - само собой. Но если их несколько десятков? Без кнопок мультивыбора пользователь меня проклянет.
Так Вы же можете их и из приложения ставить (не только юзер руками)
Так для того и кнопки.

А если команды "Создать объект" приходят по одной с интервалом скажем минут 10? И когда закончат приходить, не известно.
Пишете ф-цию/метод которая выполняет это создание, ну и она вызывается любое кол-во раз с любым интервалом
[/quote]

Если после завершения метода объект должен существовать и дальше, значит он должен быть объявлен вне метода. А локальные объекты исчезают вместе с методами, их создавшими.
И объектов этих должен быть массив переменной длины, коим и является список. Но список не допускает включения объектов, наследованных от QObject.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #13 : Апрель 30, 2017, 16:05 »

Но список не допускает включения объектов, наследованных от QObject.
указатели на QObject допускает, вроде ж писали уже об этом
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Апрель 30, 2017, 16:13 »

И объектов этих должен быть массив переменной длины, коим и является список. Но список не допускает включения объектов, наследованных от QObject.
Знову за рибу грошi  Плачущий  Самое простое - унаследоваться от айтема, напр
Код
C++ (Qt)
class MyItem : public QTreeWidgetItem {
public:
 MyItem( void ) : mObj(new QObject) {}
 ~MyItem( void ) { delete mObj; }
 
 QObject * GetObj( void ) const { return mObj; }
 
private:
 MyItem( const MyItem & ) {}
 MyItem & operator = ( const MyItem & ) {}
 
 QObectt * mObj;
};
Ну и набиваете табличку такими MyItem'ами в которых сидят указатели на объекты. Удалили айтем - удалился и объект. Хотя не знаю зачем тот QObject понадобился
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.129 секунд. Запросов: 23.