Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: ammaximus от Март 28, 2013, 20:27



Название: Использование QTextCharFormat
Отправлено: 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);

}


Название: Re: Использование QTextCharFormat
Отправлено: Swa от Март 29, 2013, 11:24
1. Если что-то не работает, это не повод переделывать всё на указатели. :) Разберитесь, зачем вообще нужны указатели. В вашем примере лучше форматы оставить на стеке.
2. Ваш код у меня работает, проблема явно где-то в другом месте.
3. Если программа "вылетает" или возвращает не 0, попробуйте запустить её в отладчике и он покажет вам строчку, в которой произошла ошибка.