Пример #1
0
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();
//    }
}
Пример #2
0
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);

}
Пример #4
0
void Completer::onTextEdited()
{
    setCompletionPrefix(QString());
}