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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как установить виджет в заголовок QTreeView  (Прочитано 6733 раз)
Gryz
Гость
« : Апрель 02, 2007, 13:10 »

Кто-нибудь сталкивался с подобной проблемой?
Хочу в заголовок вместо обычных кнопок QComboBox запихнуть.
Записан
SABROG
Гость
« Ответ #1 : Апрель 02, 2007, 13:13 »

В Header ?
Записан
Gryz
Гость
« Ответ #2 : Апрель 02, 2007, 13:17 »

Да. В то, что возвращает метод  horizontalHeader ()
Записан
SABROG
Гость
« Ответ #3 : Апрель 02, 2007, 13:33 »

Я думаю реально, т.к. хидеры это те же QStandartItem.
В методах createEditor и setEditorData надо по каким-то параметрам узнать что это именно хидер и создать соответствующий combobox. Для теста, как временное решение, можно попробывать заюзать метод QStandardItemModel
QStandardItem * itemFromIndex ( const QModelIndex & index ) const

Как-то так:

Код:

if ( index.model()->itemFromIndex(index)->text() == "Header1")
{
QComboBox *combo = new QComboBox(parent);
combo->setEditable(true);
return combo;
}


Или так:

Код:

for (int i=0; i < index.model()->columnCount(); i++)
{
if (index.model()->HorizontalItemHeader(i) == index.model()->itemFromIndex(index))
{
// поймали горизонтальный хидер любой колонки
}
}
Записан
Gryz
Гость
« Ответ #4 : Апрель 02, 2007, 14:52 »

Что-то я не пойму, каким образом QHeaderView связан с QStandartItem.

методы createEditor и setEditorData  - какого объекта?
Записан
SABROG
Гость
« Ответ #5 : Апрель 02, 2007, 15:08 »

Из Assistanta:

Цитировать

The header gets the data for each section from the model using the QAbstractItemModel::headerData() function. You can set the data by using QAbstractItemModel::setHeaderData().


Т.е. данные беруться из модели, а у модели каждый элемент есть QStandardItem.
Методы createEditor и setEditorData должны быть в твоем классе, который ты унаследовал от QItemDelegate

В любом случае я не могу сказать будет это работать или нет.
Записан
Gryz
Гость
« Ответ #6 : Апрель 02, 2007, 15:23 »

Цитата: "SABROG"

а у модели каждый элемент есть QStandardItem.

Мне кажется, что в общем случае это не так.
Записан
SABROG
Гость
« Ответ #7 : Апрель 02, 2007, 15:30 »

Цитата: "Gryz"
Цитата: "SABROG"

а у модели каждый элемент есть QStandardItem.

Мне кажется, что в общем случае это не так.

В общем я попробывал такое сделать, проблема в том, что в классе делегата класс модели передается QAbstractItemModel, в то время как у TreeView может стоят класс QStandardItemModel, у абстрактной модели нет методов для определения хидера, а как к стандартной корректно достучаться я не знаю.
Записан
Gryz
Гость
« Ответ #8 : Апрель 03, 2007, 13:19 »

Проблему решил, отнаследовавшись от QHeaderView и создавая в нужном месте заголовка экземпляры QComboBox.

в конструкторе:

Код:
    
connect(this, SIGNAL(sectionCountChanged(int , int)), SLOT(updateEditorCount(int , int )));//изменение кол-ва виджетов
    connect(this, SIGNAL( sectionResized (int , int, int)), SLOT(updateEditorsGeometry()), Qt::QueuedConnection);//переразмеривание. Единственное, что плохо - слот будет вызываться много больше раз, чем это необходимо
 


добавлено спустя 2 часа 45 минут:

 Остается непонятным, как отслеживать изменение первого видимого столбца таблицы...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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