Название: setCellWidget и setItemDelegateForColumn Отправлено: CJ1 от Ноябрь 18, 2012, 09:19 Всем привет вот тут вопрос. Я использую setItemDelegateForColumn для установки делегатов.
setCellWidget используется установка просто widget для одной ячейки? Ну то есть делегат нельзя установить для одной ячейки, а widget можно? Ну то есть в в каких случаях что лучше использовать? Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: Bepec от Ноябрь 18, 2012, 13:10 Смотри как тут сложно у тебя вопрос поставлен.
Точнее у тебя вопроса конкретного нет. Да, именно так и работает, виджет можно засунуть в любую ячейку. Да, делегат можно установить на всю таблицу, можно на колонку. А так же можно установить на колонку и получая номер строки, сделать делегаты разные для каждого номера. И да, отличие виджета от делегата. Виджет поставленный в ячейку будет там всегда. А делегат - только когда ячейка отображается на экране. Проще выражаясь пример - таблица из 5000 элементов. С виджетами - у тебя будет 5000 виджетов, которые будут создаваться хзскока, тормозить всё будет неопупенно и памяти жрать немеряно. С делегатом - делегат будет работать только на видимые ячейки. Т.е. где то 20 -100 единовременно, в зависимости от таблицы. Никаких тормозов, всё круто, память на минимуме :D Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: CJ1 от Ноябрь 18, 2012, 17:54 АААА Все теперь понятно! Спасибо!
Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: kolob от Январь 11, 2013, 09:00 А как можно в одну ячейку 2 виджета установить?
Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: Bepec от Январь 11, 2013, 10:29 Пихаешь туда QWidget с выложенным на нём словом ФЛАГМАН из кнопок, групбоксов, лейблов и вуаля
Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: kolob от Январь 11, 2013, 10:47 а если надо чтобы они независимо друг от друга редактировались, т.е. делегат вызывался сначала для lineEdit например, а потом для ComboBox?
Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: Bepec от Январь 11, 2013, 10:51 Делегат вызыватся для ячейки.
Не для виджета. Не для строки. Для ячейки. Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: kolob от Январь 11, 2013, 11:35 я понимаю, но если вызвать делегейт для ячейки, то появится этот самый виджет с набором необхоимых виджетов(lineEdit, ComboBox и т.д.), они все будут готовы для редактирования, а я бы хотел чтобы каждый из этих виджетов был отдельный при редактировании.
Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: Bepec от Январь 11, 2013, 12:11 Т.е.?
Вы можете туда засунуть креатор (если кто-то сделает его виджетом :D ) в делегат. И он будет работать и его логика не изменится. Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: kolob от Январь 11, 2013, 12:21 вот видите на рисунке, 2 виджета ComboBox размещены на tableWidget. TableWidget вызывается как делегейт. И они оба готовы к редактированию. А надо чтобы можно было их выбирать по одному
В голову пока только приходит одно, создавать 2 строки, где надо их объединять как одна. А в этом случае выставлять в каждую строку свой комбобок. И они будут вызываться по разному, в момент редактирования. Я думал может еще есть вариант какой? Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: Авварон от Январь 11, 2013, 12:34 Цитировать Maxim1905: День добрый! У меня вопрос можно Легенду подключить в ноутбуку через блютус и писать инет через нее через GPRS? Кто нибудь пробовать, есть такая возможность? ska_romash: Пока читать сообщение твоё, моя обрезать орган мозг и топтать и топтать его, пока читать ваша сообщение ещё раз. ska_romash: Простите, не выдержал. Я к чему - выражайтесь в терминах, понятных другим. Нельзя "вызвать делегат для ячейки". Его можно "установить", и только на ряд/строку, как писалось выше. "Вызывать" делегат будет вью, этот код мы контролировать не можем (не наследуясь от вью). setCellWidget можно также только "установить" (там слово "set" есть в методе, ага) и только на ячейку. При этом виджет в ячейке будет висеть ВСЕГДА. Далее, о "вызовах" делегата. Рисование таблицы осуществляется так, напишу на псевдокоде: Код: for(int row : rows) { Я опустил StyleOption, ибо не важно. Редактирование же осущевтляется принципиально по другому: Код: 0) юзер ткнул редактировать ячейку index (например, даблкликнул) зовется псевдометод view->openEditor(index): Итого - редактор создается ТОЛЬКО для ОДНОЙ ячейки - которая в данный момент редактируется. Чтобы разрешить редактирование, надо задать EditTriggers у вью и сделать ячейку редактируемой (с помощью Qt::ItemFlags, а именно Qt::ItemIsEditable) Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: Bepec от Январь 11, 2013, 12:52 Не пойму я твоих желаний, ТС.
У тебя 2 комбобокса. Как ты хочешь их выбирать? нарисуй хоть в пейнте, если словами объяснить внятно не можешь. Всю последовательность тыков и редактирования как тебе хочется нарисуй. Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: kolob от Январь 11, 2013, 12:56 цитата ;D
Все что вы описали это понятно. За то что не понятно выражаюсь извиняйте. Про установку в ячейку я имел ввиду когда вызывается функция createEditor можно выбрать что для чего по колонкам и строкам. Вопрос состоял в другом. Проще, картинка выше, посмотрите. Немного проблему опишу: если выбираются значение в 1м комбобоксе, нужно чтобы подгружались необходимые значения во 2й. При одновременном вызове: Код: editor = delegate->createEditor(index); Bepec все уже нарисовано (см. выше) Может так точнее :) Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: Bepec от Январь 11, 2013, 14:18 Кхм. Смотри в чём фишка. Ты не до конца понимаешь прикола.
В ячейку ты можешь сунуть виджет с любой логикой. Т.е. допустим создаём наследника QWidget с конструктором из списка и словаря (map <int, QStringList>). Создаёшь в нём слот на выбор первого комбобокса. В слоте пишешь аля Код: combobox_2->addItems(map[combobox->currentIndex()]) А закрытие едитора тоже можно переопределить, насколько я помню. PS хоть ты и изъясняешься виртуозно непонятно, но я так понял у тебя одна из двух проблем: 1) ты не можешь запихнуть логику в виджеты. 2) или после выбора первого комбобокса у тебя закрывается едитор Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: kolob от Январь 11, 2013, 14:32 Я сейчас объясню как у меня уже сделано:
(в ItemDelegate) в createEditor создается TableWidget c 2мя строками (1 колонка), в каждую строку устанавливается setCellWidget ComboBox. к первому подключается слот на сигнал activated(). после выбора чего либо в 1м ComboBox, после срабатывания слота 2й CombBox заполняется нужной информацией. в paint() делаю прорисовку(разделитель), как будто 2 ячейки, значение в ячейку устанавливаю setDate через '\n' чтобы были на разных строках В момент вызова делегейта они выглядят так как на картинке. А хотел чтобы 2й ComboBox выглядел как пустая ячейка. А потом когда кликили бы на него он становился ComboBox. Блин что опять сложно :) Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: Bepec от Январь 11, 2013, 14:39 Счас уже понятнее % на 80 :D
Что тебе мешает в дизайнере кинуть на виджет 2 комбобокса и один скрыть? :) А при щелчке на эту область его show'ить? :) Зачем тут TableView дополнительный? :) Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: Авварон от Январь 11, 2013, 15:37 Не факт, что я понял верно, но - почему бы в тейбл вью с 2мя ячейками не сделать еще комбобокс-делегат номер 2.
При открытии редактора в делегате 1 (тейблвью) мы говорим тейбл вью открыть редактор в ячейке 1. Эдит триггер у тейбл вью ставим на клик. Правда я не очень понимаю, как закрыть такой редактор. Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: kolob от Январь 11, 2013, 15:39 Цитировать Что тебе мешает в дизайнере кинуть на виджет 2 комбобокса и один скрыть? Улыбающийся да это вариант. что то я зациклился на таблицах.А при щелчке на эту область его show'ить? Улыбающийся Зачем тут TableView дополнительный? Улыбающийся Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: Авварон от Январь 11, 2013, 15:41 Цитировать Что тебе мешает в дизайнере кинуть на виджет 2 комбобокса и один скрыть? Улыбающийся да это вариант. что то я зациклился на таблицах.А при щелчке на эту область его show'ить? Улыбающийся Зачем тут TableView дополнительный? Улыбающийся ыы, я тоже че-то на таблицу стал думать - сказано таблицу, значит таблицу))) Название: Re: setCellWidget и setItemDelegateForColumn Отправлено: Bepec от Январь 11, 2013, 15:45 Таблица в делегате ячейки таблицы, тем более QTableWidget не есть хорошо. Это model + view+ делегат (основные) + model + view + делегат (ячеечные) + item'ов 2 штуки + комбики 2 штуки + ещё делегаты предлагают :D
А гораздо проще виджет с комбами. :D PS "Мастер простых решений" © |