QString ScriptCompleter::pathFromIndex(const QModelIndex &index) const { QStringList dataList; for(QModelIndex i = index; i.isValid(); i = i.parent()) dataList.prepend(model()->data(i, completionRole()).toString()); return dataList.join("."); }
QString CategoricalCompleter::pathFromIndex(const QModelIndex &index) const { // navigate up and accumulate data QStringList dataList; for (QModelIndex i = index; i.isValid(); i = i.parent()) { dataList.prepend(model()->data(i, completionRole()).toString()); } return dataList.join(" "); }
QString CodeCompleter::pathFromIndex(const QModelIndex &index) const { if (m_seperator.isNull()) { return QCompleter::pathFromIndex(index); } // navigate up and accumulate data QStringList dataList; for (QModelIndex i = index; i.isValid(); i = i.parent()) { dataList.prepend(model()->data(i, completionRole()).toString()); } return dataList.join(m_seperator); }
/** * Override of pathFromIndex(). */ QString ConceptHierarchyCompleter::pathFromIndex(const QModelIndex &index) const { // Calculate the last path. QStringList lineage; for (QModelIndex i = index; i.isValid(); i = i.parent()) lineage.prepend(model()->data(i, completionRole()).toString()); QString path = lineage.join(this->lineageSeparator); // Make sure that previously entered paths are also kept. QLineEdit * widget = (QLineEdit *) this->widget(); QStringList list = widget->text().split(this->entrySeparator); if (list.size() > 1) { // Delete the last path in the list, which was uncomplete. list.removeLast(); // Add the *completed* last path again at the end of the list. list.append(path); // Merge all paths together again. path = list.join(this->entrySeparator); } return path; }
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); }