Здравствуйте, гость ( Вход | Регистрация )
Litkevich Yuriy | Дата 24.5.2010, 16:42 |
эх, закладочки бы на форуме. | |
ЙаМайскЫйПчОЛ | Дата 24.5.2010, 16:13 |
РЕШЕНИЕ QWidget * QAbstractItemDelegate::createEditor ( QWidget * parent, const QStyleOptionViewItem & option, const QModelIndex & index ) const [virtual] И вот оно The returned editor widget should have Qt::StrongFocus; otherwise, QMouseEvents received by the widget will propagate to the view. т.е. конструктору надо сделать setFocusPolicy(Qt::StrongFocus); и все будет тип-топ |
|
ЙаМайскЫйПчОЛ | Дата 24.5.2010, 15:37 |
Ну даже если это заработает, то дело принципа в том, почему не работает как в демке... У них хитрость в том что у них работает только потому что изменение данных завязано на mouseMoveEvent, ни один другой mouseEvent не работает... т.е. работает, но срабатывает, только после фактического окончания редактирования НАВЕРНО придеться делать как в spinBox... Хотя врятли это решит проблемму... Я почему то думаю что мне нужен именно stardelegate example он похож на то что мне надо Может у меня пробелы в Qtобразовании и я чегото не допонимаю |
|
Litkevich Yuriy | Дата 24.5.2010, 15:30 |
Цитата void QAbstractItemView::commitData(QWidget *editor) ... if (!editor || !d->itemDelegate || d->currentlyCommittingEditor) return; QModelIndex index = d->indexForEditor(editor); if (!index.isValid()) return; d->currentlyCommittingEditor = editor; QAbstractItemDelegate *delegate = d->delegateForIndex(index); editor->removeEventFilter(delegate); delegate->setModelData(editor, d->model, index); editor->installEventFilter(delegate); d->currentlyCommittingEditor = 0; Но мне SpinBox не подходит у меня свой виджет редактирования также как и StarEditor а какая разница? Всё одно, наследник QWidget |
|
ЙаМайскЫйПчОЛ | Дата 24.5.2010, 15:27 |
Вооотттт.... Так когдаже вызываеться commit??? И зачем описаны mouseReleaseEvent У меня складываеться ощущение что они сами не знают зачем написали этот код Но мне SpinBox не подходит у меня свой виджет редактирования также как и StarEditor Я переопределил bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index); для делегата и в теле qDebug() << event; return QStyledItemDelegate::editorEvent(event, model, option, index); + StarDelegate(QWidget *parent = 0) : QStyledItemDelegate(parent) { connect(this, SIGNAL(commitData(QWidget *)), this, SLOT(commitMe(QWidget*))); } + private slots: void commitMe(QWidget *w){ qDebug() << "commit"; } на выходе оказалось что ............ QMouseEvent(MouseButtonRelease, 1, 0, 0) commit |
|
Litkevich Yuriy | Дата 24.5.2010, 15:26 |
СЛОТ commitAndCloseEditor() там даже событие mouseReleaseEvent ни разу не возникает в виджете-редакторе.Вообще я как-то и думать забыл про эти сигналы у делегата: commitData closeEditor У меня и без них всё работает. Да и потом в примере Spin Box Delegate и без них всё работает собственно слот в представлении:
|
|
ЙаМайскЫйПчОЛ | Дата 24.5.2010, 15:07 |
http://doc.crossplatform.ru/qt/4.5.0/itemv...ardelegate.html If the item is a StarRating, we create a StarEditor and connect its editingFinished() signal to our commitAndCloseEditor() slot, so we can update the model when the editor closes. Я со всей ответственностью заявляю что СЛОТ commitAndCloseEditor() не вызываеться ни одного раза в данном премере при этом это не сказываеться на работоспособности программы |
|
Litkevich Yuriy | Дата 24.5.2010, 15:04 |
работает через эту связку через какую? |
|
ЙаМайскЫйПчОЛ | Дата 24.5.2010, 13:32 |
Товарищи, приветсвую Вас. и Сразу к вопросу Если вы не поленитесь и откроете проект Star Delegate (демка) И закаментите в файле stardelegate.cpp строки 88 и 89 т.е. connect(editor, SIGNAL(editingFinished()), this, SLOT(commitAndCloseEditor())); перекомпилите и запустите, то наверное испытаете такой же шок, как и я... Программа все равно будет правильно работать... Более того, можете поиграться с этим сигналом и слотом, но в рамках данной программы они никогда не вызываються. И вот вопрос... какие механизмы обеспечивают правильное поведение Делегата и Редактора, и нахрена у товарищей из Qt написано что делегат работает через эту связку...??? Это не развлечения ради, а просто мой класс Редактора не работает так как должен, но об этом потом |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 11.12.2024, 3:34 |