Название: Использование 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, попробуйте запустить её в отладчике и он покажет вам строчку, в которой произошла ошибка.
|