int QCompletionModel::rowCount(const QModelIndex &parent) const { Q_D(const QCompletionModel); if (parent.isValid()) return 0; if (showAll) { // Show all items below current parent, even if we have no valid matches if (engine->curParts.count() != 1 && !engine->matchCount() && !engine->curParent.isValid()) return 0; return d->model->rowCount(engine->curParent); } return completionCount(); }
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); } } }