Название: QTableView и QCheckBox Отправлено: LeX от Август 26, 2009, 19:53 Доброго времени суток.
Помогите решить проблему :( Есть QTableView в котором необходимо поместить QCheckBox. Поместил я его по стандарту с помощью делегатов. Так вот проблема в том, что при редактировании ячейки таблицы всё хорошо (появляется QCheckBox), но когда курсор мыши попадает на QCheckBox, то текст в ячейке исчезает, а при отводе с него появляется опять. В методе паинт уже перерисовал всё что только можно, но текст так и исчезает :( Вопрос собственно в том, как сделать так чтобы при попадании на QCheckBox текст не исчезал, а оставался на месте. Попутно, если кто-то занимался: как постоянно отображать QCheckBox?. Вот собственно код делегата: Код: MyChBDelegate::MyChBDelegate(QObject *parent) Название: Re: QTableView и QCheckBox Отправлено: Rcus от Август 26, 2009, 20:01 "broken as intended" ©
::paint управляет отображением вне режима редактирования, а QCheckBox в режиме редактирования. /** решил бы это через Qt::CheckStateRole без привлечения своих делегатов */ Название: Re: QTableView и QCheckBox Отправлено: LeX от Август 26, 2009, 20:28 "broken as intended" © ::paint управляет отображением вне режима редактирования, а QCheckBox в режиме редактирования. /** решил бы это через Qt::CheckStateRole без привлечения своих делегатов */ Ды рад бы, только используется QSqlTableModel и нельзя переопределить мне метод data и flags :( Если подскажешь как по другому можно, я буду рад :) Название: Re: QTableView и QCheckBox Отправлено: Rcus от Август 27, 2009, 03:36 Эм то есть как это нельзя? Я пропустил введение final классов в C++? А вещь еще есть проксии модели.
Название: Re: QTableView и QCheckBox Отправлено: LeX от Август 27, 2009, 08:30 Эм то есть как это нельзя? Я пропустил введение final классов в C++? А вещь еще есть проксии модели. Да всё там можно :D Просто говорю что мне нельзя это сделать (поставлена задача таким образом (Использовать в качестве модели QSqlTableModel (нельзя мне говорят переопределять методы flags и data дабы не потерять QSqlTableModel::onManualSubmit запар говорят меньше будет с сохранением результатов, а там в другом месте запар выше крыши появляется) (я и так уже извратился переопределив метод setQuery чтобы писать запросы полнофункциональные (хз чем обернётся, но я бы лучше не делал этого))):() Вот и парюсь (извращаюсь) вешая QCheckBox в делегата :( Так есть способ исправить этот недостаток в делегате? Название: Re: QTableView и QCheckBox Отправлено: sergeyvl12 от Август 27, 2009, 10:23 Цитировать Попутно, если кто-то занимался: как постоянно отображать QCheckBox?. Не знаю поможет это или нет, но я недавно не мог избавиться от чекбоксов (без всяких делегатов). Избавился... Вот ссылка: http://www.prog.org.ru/topic_10393_0.html Они выводились как раз слева от текста. Их можно сделать редактируемыми :) Название: Re: QTableView и QCheckBox Отправлено: LeX от Август 27, 2009, 10:41 Не знаю поможет это или нет, но я недавно не мог избавиться от чекбоксов (без всяких делегатов). Избавился... Вот ссылка: http://www.prog.org.ru/topic_10393_0.html Они выводились как раз слева от текста. Их можно сделать редактируемыми :) Я же говорю нельзя для моей задачи переопределять методы flags и data. Я мог бы сделать так: Код: Qt::ItemFlags MyModel::flags(const QModelIndex &index) const Мне нужно решение проблемы через делегаты, если это возможно ??? Название: Re: QTableView и QCheckBox Отправлено: spectre71 от Август 28, 2009, 09:19 Мне нужно решение проблемы через делегаты, если это возможно ??? Легко.1) Определяешь в своей модели получение QPixmap от индекса. 2) В делегате получаешь QPixmap для индекса и отрисовываешь Отрисовка QCheckBox примерно такая: Код
Название: Re: QTableView и QCheckBox Отправлено: LeX от Август 28, 2009, 13:25 Легко. А поподробнее рассказать можешь? Я просто этим не занимался ни разу да иопыта в Qt не особо много.1) Определяешь в своей модели получение QPixmap от индекса. 2) В делегате получаешь QPixmap для индекса и отрисовываешь Кстати через флаги сделал. Всё гуд получилось :) Вот код может кому пригодится Код: Qt::ItemFlags QPGTableModel::flags(const QModelIndex &index) const P. S. Руководитель сказал сделать через делегатов :( Название: Re: QTableView и QCheckBox Отправлено: break от Октябрь 18, 2009, 01:44 нет никаких проблем с делегатом - вот рабочий код - отображает и иконку и текст и в режиме редактирования и в режиме отображения
используйте соотв. методы делегата для заполнения значений иконки и текста Код
Код
Название: Re: QTableView и QCheckBox Отправлено: cdsmika от Октябрь 25, 2009, 20:56 Подскажите как расположить QCheckBox по центру колонки при редактировании ячейки в QTableView?
Название: Re: QTableView и QCheckBox Отправлено: cdsmika от Октябрь 25, 2009, 21:00 Кто-нибудь использовал такой подход:
Код ? Название: Re: QTableView и QCheckBox Отправлено: cdsmika от Октябрь 25, 2009, 21:32 Кто-нибудь использовал такой подход: Так все проще.Код ? Вот прорисовка: void paint( QPainter * painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const { const QSqlRelationalTableModel *sqlModel = qobject_cast<const QSqlRelationalTableModel *>( qobject_cast<const QSortFilterProxyModel *>( index.model() )->sourceModel() ); if ( sqlModel->record(index.row()).field(index.column()).typeID() == 16 ) { QItemDelegate::drawBackground( painter, option, index ); QItemDelegate::drawCheck( painter, option, option.rect, index.data(Qt::EditRole).toBool() ? Qt::Checked : Qt::Unchecked ); QItemDelegate::drawFocus( painter, option, option.rect ); } else QItemDelegate::paint(painter, option, index); } Название: Re: QTableView и QCheckBox Отправлено: Barmaglodd от Ноябрь 03, 2009, 14:51 У решений с createEditor есть один большой минус - если ячейка не в фокусе, надо 2 раза жать на мышку, чтобы изменить состояние чекбокса.
В архиве делегат, который работает, как при установке Qt::ItemIsUserCheckable. Название: Re: QTableView и QCheckBox Отправлено: Yuriy от Август 20, 2011, 22:53 Barmaglodd, спасибо огромное. Давно с этим зверьком боролся. Ваш код великолепно сработал.
Название: Re: QTableView и QCheckBox Отправлено: Barmaglodd от Август 22, 2011, 14:53 Не за что :)
Название: Re: QTableView и QCheckBox Отправлено: AlekseyK от Май 01, 2016, 16:16 У решений с createEditor есть один большой минус - если ячейка не в фокусе, надо 2 раза жать на мышку, чтобы изменить состояние чекбокса. А можно в этом делегате сделать, чтобы при нажатии на ячейку, а не только на чекбокс, отмечать/снимать галочку?В архиве делегат, который работает, как при установке Qt::ItemIsUserCheckable. Название: Re: QTableView и QCheckBox Отправлено: PimenS от Май 01, 2016, 17:16 А можно в этом делегате сделать, чтобы при нажатии на ячейку, а не только на чекбокс, отмечать/снимать галочку? Можно. Название: Re: QTableView и QCheckBox Отправлено: AlekseyK от Май 01, 2016, 19:34 Можно. :)))))))))))) Как в замечательном грузинском фильме "Самые быстрые в мире": Цитировать Посылают телеграмму в другой город: - Ты знаешь адрес родственника, где свадьба? Поздно вечером приходит ответ: "Знаю!" :) - Ну тогда пошли! :))))))) А как? Название: Re: QTableView и QCheckBox Отправлено: AlekseyK от Май 01, 2016, 19:36 Barmaglodd, спасибо большое в моём случае тоже заработало, только подправил немного под логику своей модели и в одном месте пришлось DisplayRole совместить с EditRole.
Название: Re: QTableView и QCheckBox Отправлено: AlekseyK от Май 01, 2016, 19:49 А можно в этом делегате сделать, чтобы при нажатии на ячейку, а не только на чекбокс, отмечать/снимать галочку? Нужно всего лишь вот это удалить: Код Спасибо! Название: Re: QTableView и QCheckBox Отправлено: PimenS от Май 01, 2016, 22:05 А как? Для того, чтобы ответить на этот вопрос, нужно как минимум видеть, что у вас уже написано. Цитировать чтобы при нажатии на ячейку Нажатием чего вы хотите изменить чекбокс? У меня например в программе есть вьюхи которые меняют чекбокс в выделенной строке, при нажатии на интер, есть меняющие чекбокс при клике мышкой по ячейке. Что именно вы хотите получить? Название: Re: QTableView и QCheckBox Отправлено: AlekseyK от Май 04, 2016, 01:21 Для того, чтобы ответить на этот вопрос, нужно как минимум видеть, что у вас уже написано. Я уже ответил на это выше. Вопрос решён. А написано в точности в соответствии с делегатом товарища Barmaglodd: ссылка но код есть выше в теме. |