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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Использование QTextCharFormat  (Прочитано 2945 раз)
ammaximus
Гость
« : Март 28, 2013, 20:27 »

Я хочу подготовить несколько QTextCharFormat, которые хочу применять во всем классе. Но при создании этих объектов внутри класса программа вылетает в деструкторе. Я сделал их указателями - получше, теперь программа не вылетает сразу, но по завершению возвращает не 0.
Основная причина такого использования - необходимость сохранять первоначальный формат (cursor.charFormat())

Код:
#ifndef EDITOR_H
#define EDITOR_H

#include <QDialog>
#include <QDebug>
#include <QSyntaxHighlighter>
#include "missprint.h"

namespace Ui {
class Editor;
}

class Editor : public QDialog
{
    Q_OBJECT
   
public:
    explicit Editor(QWidget *parent = 0);
    ~Editor();

public slots:
    void onCursorChanged();
   
private:
    Ui::Editor *ui;
//    QTextCharFormat *noFormat;
//    QTextCharFormat *selectFormat;
//    QTextCharFormat *missFormat;
};

#endif // EDITOR_H

#include "editor.h"
#include "ui_editor.h"

Editor::Editor(QWidget *parent):
    QDialog(parent),
    ui(new Ui::Editor)
{
    ui->setupUi(this);
    connect(ui->txtEtalon, SIGNAL(cursorPositionChanged()),SLOT(onCursorChanged()));

    QTextCursor cursor(ui->txtEtalon->document());

//    noFormat = new QTextCharFormat(cursor.charFormat());
//    selectFormat = new QTextCharFormat(cursor.charFormat());
//    missFormat = new QTextCharFormat(cursor.charFormat());



//    selectFormat = cursor.charFormat();
//    selectFormat.setFontWeight(QFont::Bold);

//    missFormat.setUnderlineColor(Qt::red);
}

Editor::~Editor()
{
//    delete noFormat;
//    delete selectFormat;
//    delete missFormat;
    delete ui;
}

void Editor::onCursorChanged()
{
    //1. Store cursor position
//    int realPos = ui->txtEtalon->textCursor().position();
//    qDebug()<<"Cursor at " << ui->txtEtalon->textCursor().position();
//    QTextCursor cursor(ui->txtEtalon->document());

//    //2. Clear all format

//    cursor.movePosition(QTextCursor::Start);
//    cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor);
//    cursor.mergeCharFormat(noFormat);

//    //3. Show missprints

//    cursor.setPosition(4);
//    cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor);
//    cursor.mergeCharFormat(missFormat);

//    //4. Show current symbol
//    cursor.setPosition(realPos);
//    cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor);
//    cursor.mergeCharFormat(selectFormat);

}
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 170


Просмотр профиля
« Ответ #1 : Март 29, 2013, 11:24 »

1. Если что-то не работает, это не повод переделывать всё на указатели. Улыбающийся Разберитесь, зачем вообще нужны указатели. В вашем примере лучше форматы оставить на стеке.
2. Ваш код у меня работает, проблема явно где-то в другом месте.
3. Если программа "вылетает" или возвращает не 0, попробуйте запустить её в отладчике и он покажет вам строчку, в которой произошла ошибка.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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