Russian Qt Forum
Ноябрь 25, 2024, 13:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемы с QTextCursor : не могу изменить позицию и снять выделение в тексте  (Прочитано 5300 раз)
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


Может кто нибудь подскажет в чем проблема?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #1 : Март 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().
Записан
bombomet
Гость
« Ответ #2 : Март 25, 2008, 11:24 »

Огромное спасибо!
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #3 : Март 25, 2008, 11:30 »

Огромное спасибо!

Пожалуйста.
А вообще лучше работать с QTextDocument. Проверено на практике.
И внимательно читайте документацию. Ассистент у них великолепен.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 23.