void CategoricalCompleter::updateCurrentSuggestions() { QLineEdit*le=dynamic_cast<QLineEdit*>(widget()); if(le) { QString search=le->text(); QString newString=le->text(); QString suffix=search; search.truncate(le->cursorPosition()); suffix.remove(0,le->cursorPosition()+1); newString=search; search.remove(_completed); if(search.contains(" ")) { search.remove(0,search.lastIndexOf(" ")+1); } for(int i=_data.size()-1;i>=0;i--) { if((search==_data[i].prefix())) { qDebug()<<"!"<<completionPrefix()<<"##"<<newString<<"##"<<suffix<<search; setCompletionPrefix(newString); if(popup()->isHidden()) { // le->setText(newString); setModel(new QStringListModel(join(_data[i],newString))); complete(); _tableView->setData(&_data[i],newString); _currentSubset=&_data[i]; } break; } } } // if(popup()->isHidden()) { // complete(); // } }
void Completer::onTabPressed() { if (!d.lineEdit) return; // store selection int pos = d.lineEdit->cursorPosition(); int start = d.lineEdit->selectionStart(); QString selected = d.lineEdit->selectedText(); // select current word d.lineEdit->cursorWordForward(false); d.lineEdit->cursorWordBackward(true); QString word = d.lineEdit->selectedText(); // choose model if (word.startsWith('/')) { if (model() != d.slashModel) setModel(d.slashModel); } else { if (model() != d.defaultModel) setModel(d.defaultModel); } QString prefix = completionPrefix(); if (prefix.isEmpty() || !word.startsWith(prefix, Qt::CaseInsensitive)) setCompletionPrefix(word); // restore selection d.lineEdit->setCursorPosition(pos); if (start != -1) d.lineEdit->setSelection(start, selected.length()); // complete if (!word.isEmpty()) { complete(); int count = completionCount(); if (count > 0) { int next = currentRow() + 1; setCurrentRow(next % count); } } }
bool QWordCompleter::eventFilter(QObject *o, QEvent *e) { if(widget()->inherits("QTextEdit") && e->type() == QEvent::KeyPress){ QKeyEvent* ke = static_cast<QKeyEvent*>(e); switch (ke->key()) { case Qt::Key_Space: if(ke->modifiers().testFlag(Qt::ControlModifier)){ QTextEdit* textEdit = qobject_cast<QTextEdit*>(widget()); QTextCursor textCursor = textEdit->textCursor(); textCursor.movePosition(QTextCursor::StartOfWord, QTextCursor::KeepAnchor); if(textCursor.selectedText().length() >= minCompletionPrefixLength){ setCompletionPrefix(textCursor.selectedText()); QRect rect = QRect(textEdit->cursorRect().bottomLeft(), QSize(100, 5)); complete(rect); } return true; } break; case Qt::Key_Enter: case Qt::Key_Return: case Qt::Key_Tab: if(popup()->isVisible()){ popup()->hide(); if(popup()->currentIndex().isValid()){ emit activated(popup()->currentIndex()); emit activated(popup()->currentIndex().data(completionRole()).toString()); } return true; } default: break; } } return QCompleter::eventFilter(o, e); }
void Completer::onTextEdited() { setCompletionPrefix(QString()); }