crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Реализация специфического редактирования QStandardItem, Помогите выбрать направление, в котором копать
lojka
  опции профиля:
сообщение 1.3.2009, 13:31
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 24.1.2009
Пользователь №: 506

Спасибо сказали: 0 раз(а)




Репутация:   0  


Прикрепляю файл-картинку, показывающую, что я хочу реализовать

Прикрепленное изображение


В общем есть QTableView, на неё установлена модель QStandardItemModel, состоящая, соответственно, из QStandardItem.

Для некоторых строк этого представления не требуется особенного делегата, т.е. редиктируются стандартно. Но для некоторых надо, что бы при попытке редактирования появлялась кнопка с многоточием, как на рисунке, при нажатии на которую вылезал диалог, а потом диалог возвращал определенный текст в ячейку.

Пока я догадался до двух вариантов

плохой: просто создать кнопку на форме и делать её видимой каждый раз, когда выбрана запись, для которой нужна кнопка (соответственно расчитывать координаты этой кнопки в зависимости от выбранной записи) - бред помойму

вариант получше: пишу делегат простейшей,подкласс от qitemdelegate, ставлю в виде editor-а уменьшенную кнопку, при клике на эту кнопку вызываю диалог, при закрытии диалога, передаю в модель,указатель на которую передан из приложения при вызове делегата, этот текст (что бы текст отобразился сразу, несмотря на то, что редактирование еще не завершено).


извиняюсь,что скорее всего непонятно написал, если надо подробнее объяснить могу.


вопрос мой в чем - правильно ли я думаю как надо делать или есть гораздо более легкие способы для реализации данной задачи?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 1.3.2009, 13:52
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Кроме делегатов нет лучшего решения. Это стандартный способ. Объясни зачем в поле "Пол" кнопка выбора директории скажем? При нажатии на такую кнопку обычно диалог появляется.

//createEditor
            QPushButton *button = new QPushButton(parent);
            button->setMaximumWidth(16);
            button->setText(QLatin1String("..."));
            connect(button, SIGNAL(activated(int)), this, SLOT(emitCommitData()));
            return button;


Вместо emitCommitData можно повесить свой слот, который покажет нужный диалог. В принципе можно воспользоваться dynamic propeties у кнопки, чтобы впихнуть туда указатель на нужный item, а в слоте через sender()'a его получить.

Сообщение отредактировал SABROG - 1.3.2009, 14:08
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lojka
  опции профиля:
сообщение 1.3.2009, 16:29
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 24.1.2009
Пользователь №: 506

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(SABROG @ 1.3.2009, 13:52) *
Объясни зачем в поле "Пол" кнопка выбора директории скажем? При нажатии на такую кнопку обычно диалог появляется.

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

Если для поля "пол" это не так очевидно (хотя пользователь может не знать как именно надо ввести пол МУЖСКОЙ, МУЖ, муж, жен, ЖЕН, ЖЕНСК), а вот с другими полями, например "Город, Университет" - выбор из списка лучше вяжется.

Цитата(SABROG @ 1.3.2009, 13:52) *
Кроме делегатов нет лучшего решения. Это стандартный способ.
//createEditor
...


Спс, я примерно так и сделал, хотя идейку апгрейда моих мыслей ты мне подал.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.3.2009, 16:44
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(lojka @ 1.3.2009, 19:29) *
Просто в этой таблице должны быть поля, которые вводятся не в ручную, а выбором из определенного списка (а список будет показан в диалоге), т.к. эта таблица служит для редактирования БД.
тогда лучше комбобокс, а если поля из другой таблицы, то смотри QSqlRelationalTableModel

и пример Relational Table Model Example
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lojka
  опции профиля:
сообщение 1.3.2009, 17:36
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 24.1.2009
Пользователь №: 506

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 1.3.2009, 16:44) *
Цитата(lojka @ 1.3.2009, 19:29) *
Просто в этой таблице должны быть поля, которые вводятся не в ручную, а выбором из определенного списка (а список будет показан в диалоге), т.к. эта таблица служит для редактирования БД.
тогда лучше комбобокс, а если поля из другой таблицы, то смотри QSqlRelationalTableModel

и пример Relational Table Model Example


Для определённой задачи да, но в моих списках может быть огромная куча различных вариантов выбора (например несколько сотен для определенных полей), а так же надо обеспечить возможность поиска по этому списку, фильтрацию, так что комбобокс тут не совсем подходит...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.3.2009, 18:17
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(lojka @ 1.3.2009, 20:36) *
возможность поиска по этому списку, фильтрацию, так что комбобокс тут не совсем подходит...
а может наоборот, к нему можно и QCompleter привинтить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lojka
  опции профиля:
сообщение 1.3.2009, 19:00
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 24.1.2009
Пользователь №: 506

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 1.3.2009, 18:17) *
Цитата(lojka @ 1.3.2009, 20:36) *
возможность поиска по этому списку, фильтрацию, так что комбобокс тут не совсем подходит...
а может наоборот, к нему можно и QCompleter привинтить?


про QCompleter загуглил... оригинально, но мне все же кажется не то, не совсем то. Если я правильно понял за пару секунд сканирования того, что это за штука - QCompleter - это для того что бы при вводе в QComboBox или QLineEdit подгружалось автозаполнение, в котором формировались слова, в зависимости от того, что пользователь печатет, для моего случая не подходит. Да и на мой вопрос, в принципе, я ответ уже получил, спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 0:42