У меня есть QTableWidget
с пользовательским QStyledItemDelegate
, и при вводе в редактирование ячейки я хочу открыть всплывающее окно завершения, но оно не появляется.
Настройка делегата:
tableWidget.setItemDelegate(new DelegateLineEdit());
Мой пользовательский класс:
class DelegateLineEdit : public QStyledItemDelegate
{
public:
DelegateLineEdit() {
signs << "<" << "<=" << ">" << ">=" << "=";
}
~DelegateLineEdit(){ }
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const {
QLineEdit *line_edit = new QLineEdit(parent);
line_edit->setStyle(parent->style());
line_edit->setFocusPolicy(Qt::StrongFocus);
QCompleter *completer = new QCompleter(signs, line_edit);
completer->setCompletionMode(QCompleter::UnfilteredPopupCompletion);
line_edit->setCompleter(completer);
return line_edit;
}
void setEditorData(QWidget *editor, const QModelIndex &index) const {
QStyledItemDelegate::setEditorData(editor, index);
QLineEdit *line_edit = dynamic_cast<QLineEdit*>(editor);
if (line_edit){
line_edit->completer()->complete();
}
}
private:
QStringList signs;
};
Когда я вхожу в редактирование ячейки двойным щелчком, ничего не происходит, но если я прокомментирую строку line_edit->completer()->complete()
, я могу редактировать ячейку, но завершение не отображается. У кого-нибудь есть идея?
setEditorData
. Завершитель должен появляться, когда пользователь начинает печатать, никаких дополнительных действий в коде не требуется. - person p-a-o-l-o   schedule 23.03.2018