Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QTableWidget, Как при выделении ячейки вывести на её месте другой виджет?
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
Strikevld
Что нужно сделать при сигнале cellActivated чтобы вместо текста вывести QComboBox
При этом чтобы текст никуда не делся,
Надо чтобы другой виджет(этот самый QComboBox) как бы перекрывал ячейку (это касается не только QComboBox)
При выделении другой ячейки этот виджет будет перемещён!
Алексей1153
нужно создать экземпляр QComboBox с родителем==таблица, затем комбу разместить ровно в размер ячейки на таблице
Litkevich Yuriy
Цитата(Strikevld @ 6.9.2011, 22:56) *
Неужели так нельзя сделать?
А разве ты пытался?
Sokoloff
Цитата(Strikevld @ 6.9.2011, 20:56) *
Что нужно сделать при сигнале cellActivated чтобы вместо текста вывести QComboBox
При этом чтобы текст никуда не делся,
Надо чтобы другой виджет(этот самый QComboBox) как бы перекрывал ячейку (это касается не только QComboBox)
При выделении другой ячейки этот виджет будет перемещён!

По моему такое можно сделать через делегата.
Strikevld
Цитата(Litkevich Yuriy @ 7.9.2011, 11:57) *
Цитата(Strikevld @ 6.9.2011, 22:56) *
Неужели так нельзя сделать?
А разве ты пытался?

Да пытался! (Так как описал Алексей1153)

Цитата(Алексей1153 @ 7.9.2011, 10:26) *
нужно создать экземпляр QComboBox с родителем==таблица, затем комбу разместить ровно в размер ячейки на таблице

Я пробовал так, только я создавал QComboBox без родителя а потом делал его родителем таблицу через setParent.
Ведь одно и тоже но комбо не видно!
Ставил позицию и размеры,,, всё-равно! :unsure:

Кстати насчет:
>>>как бы перекрывал ячейку

Точнее сказать чтобы ячейка была его родителем! (Возможно ли это?)
Алексей1153
Цитата
Ведь одно и тоже но комбо не видно!


так надо было его показать )
Strikevld
Цитата(Алексей1153 @ 7.9.2011, 20:53) *
Цитата
Ведь одно и тоже но комбо не видно!


так надо было его показать )


если вы про ->show(); то я не совсем идиот!
Показывал всё равно не видно!
MoPDoBoPoT
Делегат + нужная стратегия редактирования у представления (QAbstractItemView::EditTriggers)
Алексей1153
Strikevld, да я и не говорил, что кто-то идиот. Если не видно виджет, это одно из трёх:

1)он не создан
2)он скрыт
3)он передвинут не туда
MoPDoBoPoT
Цитата(Алексей1153 @ 7.9.2011, 7:26) *
нужно создать экземпляр QComboBox с родителем==таблица, затем комбу разместить ровно в размер ячейки на таблице

Кстати, чтобы так сделать, надо парентом сделать вьюпорт (QAbstractScrollArea::viewport()), а не саму таблицу. Но через делегат, по-моему, правильней и удобней.
Гость
Посмотри QTableWidget::setCellWidget (http://doc.crossplatform.ru/qt/4.6.x/qtablewidget.html#setCellWidget)

Я пользовался QTreeWidget::setItemWidget (аналог у дерева). Встраиваемый виджет сам вписывается в элемент, ресайзится скролится и т.п.
Litkevich Yuriy
Цитата(Strikevld @ 7.9.2011, 18:44) *
Да пытался!
а где же код?
Strikevld
Цитата(Litkevich Yuriy @ 9.9.2011, 20:24) *
Цитата(Strikevld @ 7.9.2011, 18:44) *
Да пытался!
а где же код?

Да блин... я его уже переписал подругому пока что вывожу ячейку в отдельном комбо ниже таблицы,
Но вопрос ещё остаётся, я в Qt как бы новичок поэтому буду щас разбираться что такое делегат,
попробую по книжке "QT4.5 Проф. программирование на С++"
Но хотелось-бы просто разместить комбо над таблицей, как например другие виджеты!
Буду учить, учить и ещё раз учить!!!
Strikevld
Цитата(Алексей1153 @ 7.9.2011, 10:26) *
нужно создать экземпляр QComboBox с родителем==таблица, затем комбу разместить ровно в размер ячейки на таблице

Кстати вариант хороший, а как узнать текущую позицию и размер ячейки (QTableWidgetItem) относительно окна или вьюпорта таблицы?
Strikevld
Всем большое спасибо за внимание и ответы!
Нашел! Нужная мне функция setIndexWidget
Но чтобы её использовать надо юзать TableView т.е пришлось
подучить модель представление и теперь пожалуй я вижу лучшим выходом
использование делегатов!

Проблема решена! Привелико благодарен! ;) :)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.