1

私は現在、Qtで書かれたコードエディタに取り組んでいます。

オートコンプリートやシンタックスハイライトなど、必要な機能のほとんどを実装できましたが、理解できない問題が1つあります。

使用するモデルを作成しましたQCompleter。これは、htmlタグやc++キーワードなどに適していますif else

しかし、ユーザーが入力した変数をコンプリーターに追加したいと思います。

そこで、単語を取得するイベントを作成しましたQTextEdit(変数などであることを確認する必要があることはわかっていますが、今は機能させたいだけです)。

void TextEdit::checkWord()
{
    //going to get the previous word and try to do something with it
    QTextCursor tc = textCursor();
    tc.movePosition(QTextCursor::PreviousWord);
    tc.select(QTextCursor::WordUnderCursor);
    QString word = tc.selectedText();
    //check to see it is in the model
}

QCompleterしかし、今度は、その単語がすでにsモデルに含まれているかどうかを確認する方法と、含まれていない場合はどのように追加するかを調べたいと思います。

私は以下を試しました:

QAbstractItemModel *m = completer->model();
//dont know what to do with it now :(
4

1 に答える 1

2

を使用して、本当にword自分の中にあるかどうかを確認できますQCompleter

QAbstractItemModel *m = completer->model();

ご覧のとおり、メソッドはポインタをmodel()返します。const

これは手順の確認に適しています。次のように確認できます。

bool matched = false;
QString etalon("second");
QStringListModel *strModel = qobject_cast<QStringListModel*>(completer.model());
if (strModel!=NULL)
    foreach (QString str, strModel->stringList()) {
        if (str == etalon)
        {
            matched = true;
            break;
        }
    }
qDebug()<<matched;

ただし、目的のために、宣言しQStringListModelてコンプリーターに接続することをお勧めします。その後、QtのMVCプログラミングの原則(http://doc.qt.digia)に従って、モデルを介して実行する必要のあるすべての操作を実行します。 .com / qt / model-view-programming.html)。

コードは次のようになります。

// declaration
QCompleter completer;
QStringListModel completerModel;

// initialization
completer.setModel(&completerModel);
QStringList stringListForCompleter;
stringListForCompleter << "first" << "second" << "third";
completerModel.setStringList(stringListForCompleter);

// adding new word to your completer list
completerModel.setStringList(completerModel.stringList() << "New Word");

幸運を!

于 2012-12-17T10:07:19.140 に答える