0

Windows 7 SP1
MSVS 2010
Qt 4.8.4

私はQTextCursor各ブロックのテキストを取得するために使用しています。私select(QTextCursor::BlockUnderCursor)はテキストを取得してから、。を使用して次のブロックに移動するために使用しますmovePosition(QTextCursor::NextBlock)。しかし、もう一度select(QTextCursor::BlockUnderCursor)、に余分なジャンクキャラクターが表示されQString、アンカーが前のブロックの最後に移動しました。

text.txtにこれを使用する:

A
B

このコードのコメントは問題をウォークスルーし、質問をします:

 #include <QTGui>
 int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QMainWindow*          window = new QMainWindow;
    QTextEdit*            editor = new QTextEdit(window);
    QTextDocument*      document = new QTextDocument(window);

    editor->setDocument(document);
    QFile file("test.txt");
    if (file.open(QFile::ReadOnly | QFile::Text))
        editor->setPlainText(file.readAll());

    QTextBlock block = document->begin();
    QTextCursor* cursor = new QTextCursor(document);
    int pos = cursor->position();           // = 0
    int anchor = cursor->anchor();          // = 0

    cursor->select(QTextCursor::BlockUnderCursor);
    pos = cursor->position();               // = 1
    anchor = cursor->anchor();              // = 0

    QString text = cursor->selectedText();  // = "A"
    int size = text.size();                 // = 1

    cursor->movePosition(QTextCursor::NextBlock);
    pos = cursor->position();               // = 2
    anchor = cursor->anchor();              // = 2

    cursor->select(QTextCursor::BlockUnderCursor);
    pos = cursor->position();               // = 3
    anchor = cursor->anchor();              // = 1 Why not 2?

    text = cursor->selectedText();          // "B" in debugger
                                            // but text.at(0) = junk & test.at(1) = "B"
    size = text.size();                     // = 2 Why? Why not 1?

    return app.exec();
}
4

2 に答える 2

1

がらくたではありません。最初の文字には、U + 2029段落区切り文字(HTML:PSEP)が含まれています。つまり、ブロックを選択すると、開始段落の区切り文字が含まれます。最初のブロックには開始SEPがありません。したがって、後続のブロックのテキストのみを抽出する場合は、最初の文字を除外する必要があります。

于 2013-02-14T00:02:19.790 に答える
0

ナビゲーション値は、の性質、QTextBlockブロックごとのナビゲーション方法、およびによって決定される内容と関係がありBlockUnderCursorます。ドキュメントはこれについての洞察を与えます:

http://doc.qt.digia.com/main-snapshot/qtextblock.html#details

ドキュメントの別の部分が私に役立ったようです:

http://doc.qt.digia.com/main-snapshot/qtextblockformat.html#details

私はあなたが見つけたものを実験していませんが、ここに私の考えのいくつかがあります:

ある意味では、MSWord文書のWindowsでCtrl+UpまたはCtrl+Downを押すようなものだと思います。その一部は、使用している行末に関係している可能性があります。"\ r \n"v。"\n"。「eof」文字の操作がおかしい場合があることを私は知っています。一部のドキュメントおよびフォーマットでは、ファイルの終わり文字の前に改行が必要です。

お役に立てば幸いです。

于 2013-02-13T22:54:19.093 に答える