crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> проблема при удалении изображения из QTextEdit
Rio9
  опции профиля:
сообщение 29.4.2010, 14:46
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 29.4.2010
Пользователь №: 1675

Спасибо сказали: 0 раз(а)




Репутация:   0  


Столкнулся с такой проблемой. Имеется QTextEdit, в него програмно добавляется изображение:

lastcursor.insertImage(img,QTextFrameFormat::FloatLeft);

в итоге в html сохраняется как положено: <img src="any.jpg" style="float: left;">

Теперь идём дальше. Если удалить изображение из окна редактирования, то курсор остается на том месте, где была граница изображения. Как бы область редактора, где до этого было изображение - заблокировано.

При перезапуске редактора проблема исчезает, но это ведь не решение.

Прошу совета.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kibsoft
  опции профиля:
сообщение 29.4.2010, 15:28
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 180
Регистрация: 21.7.2009
Из: Самара
Пользователь №: 928

Спасибо сказали: 14 раз(а)




Репутация:   2  


А на других компах проверяли? Может тока у вас глюк.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rio9
  опции профиля:
сообщение 29.4.2010, 15:30
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 29.4.2010
Пользователь №: 1675

Спасибо сказали: 0 раз(а)




Репутация:   0  


не проверял, но не дуаю что у меня глюк. Вот почему: если не задавать обтекание, то всё возвращается на место как положено. Проблема появляется только с указанным обтеканием.
Но я обязательно проверю завтра на других компьютерах
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kibsoft
  опции профиля:
сообщение 29.4.2010, 15:39
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 180
Регистрация: 21.7.2009
Из: Самара
Пользователь №: 928

Спасибо сказали: 14 раз(а)




Репутация:   2  


Цитата(Rio9 @ 29.4.2010, 16:30) *
не проверял, но не дуаю что у меня глюк. Вот почему: если не задавать обтекание, то всё возвращается на место как положено. Проблема появляется только с указанным обтеканием.
Но я обязательно проверю завтра на других компьютерах

В крайнем случае можно попробовать deletePreviousChar() из QTextCursor, чтобы курсор вернулся. Реализовать можно например в keyPressEvent.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rio9
  опции профиля:
сообщение 30.4.2010, 10:56
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 29.4.2010
Пользователь №: 1675

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(kibsoft @ 29.4.2010, 16:39) *
В крайнем случае можно попробовать deletePreviousChar() из QTextCursor, чтобы курсор вернулся. Реализовать можно например в keyPressEvent.

На других компьютерах проблема так же остается проблемой...
А что даст deletePreviousChar(), если в html ничего лишнего нет? ни параграфа, ни отступа, ничего...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kibsoft
  опции профиля:
сообщение 30.4.2010, 22:25
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 180
Регистрация: 21.7.2009
Из: Самара
Пользователь №: 928

Спасибо сказали: 14 раз(а)




Репутация:   2  


Цитата(Rio9 @ 30.4.2010, 11:56) *
Цитата(kibsoft @ 29.4.2010, 16:39) *
В крайнем случае можно попробовать deletePreviousChar() из QTextCursor, чтобы курсор вернулся. Реализовать можно например в keyPressEvent.

На других компьютерах проблема так же остается проблемой...
А что даст deletePreviousChar(), если в html ничего лишнего нет? ни параграфа, ни отступа, ничего...

Просто у меня встречалась такая проблема, что при удалении картинки в TextEdit программа рушилась полностью, deletePreviousChar помог (хотя это не совсем правильно, но хоть какой-то выход). Поэтому просто в keyPressEvent смотри предыдущий символ картинка или нет, если да, то выполняй deletePreviousChar(), если нет, то продолжай обрабатывать стандартными действиями.
void SendTextEdit::keyPressEvent(QKeyEvent *e)
{
if (e->key()==Qt::Key_Backspace && textCursor().charFormat().toImageFormat().isValid()) {
        QTextCursor tempCursor=textCursor();
        tempCursor.deletePreviousChar();
        setTextCursor(tempCursor);
    }
    else
        QTextEdit::keyPressEvent(e);
}

Что-то типа такого..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rio9
  опции профиля:
сообщение 2.5.2010, 9:19
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 29.4.2010
Пользователь №: 1675

Спасибо сказали: 0 раз(а)




Репутация:   0  


kibsoft, я только начал осваиваться в Qt, не совсем понимаю как происходит переопределение функций.
1) Что писать в заголовочном файле?
2) SendTextEdit в твоем примере - это имя класса приложения или самого поля ввода?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kibsoft
  опции профиля:
сообщение 2.5.2010, 10:29
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 180
Регистрация: 21.7.2009
Из: Самара
Пользователь №: 928

Спасибо сказали: 14 раз(а)




Репутация:   2  


Цитата(Rio9 @ 2.5.2010, 10:19) *
kibsoft, я только начал осваиваться в Qt, не совсем понимаю как происходит переопределение функций.
1) Что писать в заголовочном файле?
2) SendTextEdit в твоем примере - это имя класса приложения или самого поля ввода?

.h
class MyTextEdit:public QTextEdit
{
     Q_OBJECT
public:
    MyTextEdit(QWidget *parent=0):QTextEdit(parent);
    void keyPressEvent(QKeyEvent *e)
    {  
        if (e->key()==Qt::Key_Backspace && textCursor().charFormat().toImageFormat().isValid()) {
        QTextCursor tempCursor=textCursor();
        tempCursor.deletePreviousChar();
        setTextCursor(tempCursor);
    }
    else
        QTextEdit::keyPressEvent(e);
    }
}

Можешь keyPressEvent вынести в файл .cpp, тогда будет как в моем предыдущем посте, т.е. MyTextEdit::keyPressEvent(QKeyEvent *e).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rio9
  опции профиля:
сообщение 2.5.2010, 10:52
Сообщение #9


Новичок


Группа: Новичок
Сообщений: 8
Регистрация: 29.4.2010
Пользователь №: 1675

Спасибо сказали: 0 раз(а)




Репутация:   0  


kibsoft, Извини, но я снова не понимаю...
Вот смотри, я в QtCreator'е создал проект, есть заголовочный файл editor.h с содержимым (это не тот проект, в котором проблема, я просто дома создал новый только для нахождения решения этого косяка)
class editor : public QMainWindow {
    Q_OBJECT
public:
    editor(QWidget *parent = 0);
    ~editor();

private:
    Ui::editor *ui;

private slots:
    void on_pushButton_clicked();
}

, файл реализации editor.cpp:
#include "editor.h"
#include "ui_editor.h"

editor::editor(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::editor)
{
    ui->setupUi(this);
}

editor::~editor()
{
    delete ui;
}

void editor::on_pushButton_clicked()
{
    QString imgname = QFileDialog::getOpenFileName(this,"",QString(),"*.jpg");
    QTextCursor cursor(ui->textEdit->textCursor());
    cursor.insertHtml("<img src=\""+imgname+"\" align=left>");
}


Теперь что мне и куда писать?

Если не тяжело, напиши подробно что и куда писать...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


6 чел. читают эту тему (гостей: 6, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 23:40