Название: Проблемы с QTextCursor : не могу изменить позицию и снять выделение в тексте
Отправлено: bombomet от Март 24, 2008, 10:58
Доброе время суток. При разработке GUI обнаружилась проблема с использованием QTextCursor для QTextEdit. В частности: при попытке изменения позиции курсора в тексте методами QTextCursor :: setPosition ( int pos, MoveMode m = MoveAnchor ) и QTextCursor::movePosition ( MoveOperation operation, MoveMode mode = MoveAnchor, int n = 1 ) ничего не происходит, курсор остается там же где и был. Так же оказалось невозможным снять выделение (selection) при помощи QTextCursor :: clearSelection(). Далее привожу полный текст разработанного мною класса: //my_editor.cpp
#include "my_editor.h" /*!******************************************************************************************************/ my_editor::my_editor(QWidget* p) : QTextEdit(p) { connect(this,SIGNAL (selectionChanged()), SLOT (slot_on_sel_changed())); QFile f(QFileDialog::getOpenFileName(this,tr("Open files"), "/root", tr("All Files (*)"))); if(f.open(QIODevice::ReadOnly)) { QTextStream s(&f); QString str = s.readAll(); setPlainText (str); f.close(); } selectAll(); textCursor().clearSelection(); textCursor().setPosition(toPlainText().length()/2); textCursor().movePosition(QTextCursor::NextCharacter,QTextCursor::KeepAnchor,toPlainText().length()); currentCharFormat().setBackground(QBrush(Qt::blue)); textCursor().clearSelection(); } /*!******************************************************************************************************/
my_editor::~my_editor() { } /*!******************************************************************************************************/
void my_editor::slot_on_sel_changed () { QTextCharFormat format = currentCharFormat(); format.setBackground(QBrush(Qt::red)); setCurrentCharFormat(format); } /*!******************************************************************************************************/
//my_editor.h
#ifndef MY_EDITOR_H #define MY_EDITOR_H
#include <QtGui> #include <qfile.h> #include <qtextstream.h>
class my_editor : public QTextEdit { Q_OBJECT public: my_editor(QWidget* p);
~my_editor();
private slots: void slot_on_sel_changed (); };
#endif
Может кто нибудь подскажет в чем проблема?
Название: Re: Проблемы с QTextCursor : не могу изменить позицию и снять выделение в тексте
Отправлено: Mikhail от Март 24, 2008, 23:23
Доброе время суток. При разработке GUI обнаружилась проблема с использованием QTextCursor для QTextEdit. В частности: при попытке изменения позиции курсора в тексте методами QTextCursor :: setPosition ( int pos, MoveMode m = MoveAnchor ) и QTextCursor::movePosition ( MoveOperation operation, MoveMode mode = MoveAnchor, int n = 1 ) ничего не происходит, курсор остается там же где и был. Так же оказалось невозможным снять выделение (selection) при помощи QTextCursor :: clearSelection(). Далее привожу полный текст разработанного мною класса: //my_editor.cpp
#include "my_editor.h" /*!******************************************************************************************************/ my_editor::my_editor(QWidget* p) : QTextEdit(p) { connect(this,SIGNAL (selectionChanged()), SLOT (slot_on_sel_changed())); QFile f(QFileDialog::getOpenFileName(this,tr("Open files"), "/root", tr("All Files (*)"))); if(f.open(QIODevice::ReadOnly)) { QTextStream s(&f); QString str = s.readAll(); setPlainText (str); f.close(); } selectAll(); textCursor().clearSelection(); textCursor().setPosition(toPlainText().length()/2); textCursor().movePosition(QTextCursor::NextCharacter,QTextCursor::KeepAnchor,toPlainText().length()); currentCharFormat().setBackground(QBrush(Qt::blue)); textCursor().clearSelection(); } /*!******************************************************************************************************/
my_editor::~my_editor() { } /*!******************************************************************************************************/
void my_editor::slot_on_sel_changed () { QTextCharFormat format = currentCharFormat(); format.setBackground(QBrush(Qt::red)); setCurrentCharFormat(format); } /*!******************************************************************************************************/
//my_editor.h
#ifndef MY_EDITOR_H #define MY_EDITOR_H
#include <QtGui> #include <qfile.h> #include <qtextstream.h>
class my_editor : public QTextEdit { Q_OBJECT public: my_editor(QWidget* p);
~my_editor();
private slots: void slot_on_sel_changed (); };
#endif
Может кто нибудь подскажет в чем проблема? Подскажет ассистент: QTextCursor QTextEdit::textCursor () const Returns a copy of the QTextCursor that represents the currently visible cursor. Note that changes on the returned cursor do not affect QTextEdit's cursor; use setTextCursor() to update the visible cursor. See also setTextCursor().
Название: Re: Проблемы с QTextCursor : не могу изменить позицию и снять выделение в тексте
Отправлено: bombomet от Март 25, 2008, 11:24
Огромное спасибо!
Название: Re: Проблемы с QTextCursor : не могу изменить позицию и снять выделение в тексте
Отправлено: Mikhail от Март 25, 2008, 11:30
Огромное спасибо!
Пожалуйста. А вообще лучше работать с QTextDocument. Проверено на практике. И внимательно читайте документацию. Ассистент у них великолепен.
|