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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTextEdit: разнесение текста на 2 страницы  (Прочитано 7190 раз)
itan
Гость
« : Июнь 10, 2009, 09:34 »

Существуют 2 файла html, которые необходимо отобразить на 2 разных страницах QTextEdit:
Код:
File file1(htmlFileName1);
if (!file.open(QFile::ReadOnly))
return false;

QFile file2(htmlFileName2);
if (!file2.open(QFile::ReadOnly))
return false;

QTextEdit textEdit(0);

QByteArray data = file1.readAll();
QTextCodec *codec = Qt::codecForHtml(data);
QString str = codec->toUnicode(data);

textEdit.setHtml(str);

data = file2.readAll();
codec = Qt::codecForHtml(data);
str = codec->toUnicode(data);

textEdit.append(str);

Как это можно сделать?
Записан
spectre71
Гость
« Ответ #1 : Июнь 10, 2009, 09:38 »

Что значит отобразить на 2-х разных страницах?
Записан
itan
Гость
« Ответ #2 : Июнь 10, 2009, 09:45 »

Сейчас все 2 файла (таблицы) умещаются на одной странице, друг за другом.
А надо, чтобы: 1-ый файл (таблица) на 1-ой странице, 2-ой файл (тоже таблица) на 2-ой странице.
Записан
spectre71
Гость
« Ответ #3 : Июнь 10, 2009, 09:51 »

Используй QTabWidget
Записан
itan
Гость
« Ответ #4 : Июнь 10, 2009, 09:56 »

Вообще-то я все это дальше на печать вывожу:
Код:
QPrinter printer(QPrinter::HighResolution);
QPrintPreviewDialog prv(&printer, &textEdit);
connect(&prv, SIGNAL(paintRequested(QPrinter *)), &textEdit, SLOT(print(QPrinter *)));

Думаю тут надо смотреть в сторону QTextDocument и QTextCursor, только вот там нет метода типа "начало новой страницы"
« Последнее редактирование: Июнь 10, 2009, 09:58 от itan » Записан
spectre71
Гость
« Ответ #5 : Июнь 10, 2009, 10:03 »

Опиши свою задачу подробнo, по шагам.
Записан
itan
Гость
« Ответ #6 : Июнь 10, 2009, 10:10 »

Имеется модуль создания отчетов:
1. Каждый элемент отчета (таблица, график, диаграмма и т.д.) генерируется в отдельный html файл.
2. Для лучшего восприятия на PrintPreview хотелось бы отображать каждый элемент отчета (html файл) начиная с новой страницы.
3. Далее на печать.
Записан
spectre71
Гость
« Ответ #7 : Июнь 10, 2009, 10:38 »

QPrinter::newPage()
Записан
spectre71
Гость
« Ответ #8 : Июнь 10, 2009, 10:51 »

Вообще-то я все это дальше на печать вывожу:
Код:
QPrinter printer(QPrinter::HighResolution);
QPrintPreviewDialog prv(&printer, &textEdit);
connect(&prv, SIGNAL(paintRequested(QPrinter *)), &textEdit, SLOT(print(QPrinter *)));

Думаю тут надо смотреть в сторону QTextDocument и QTextCursor, только вот там нет метода типа "начало новой страницы"

connect(&prv, SIGNAL(paintRequested(QPrinter *)), &textEdit, SLOT(print(QPrinter *)));
Что бы это значило!
print - не слот
Записан
itan
Гость
« Ответ #9 : Июнь 10, 2009, 11:18 »

Ну, да, вот так должно быть:
Код:
class CQTextEdit : public QTextEdit
{
Q_OBJECT
public:
CQTextEdit(QWidget* parent): QTextEdit(parent) {}

private slots:
void print(QPrinter *);
};

void CQTextEdit::print(QPrinter* p)
{
QTextEdit::print(p);
}

СQTextEdit textEdit(0);
....
QPrinter printer(QPrinter::HighResolution);
QPrintPreviewDialog prv(&printer, &textEdit);
connect(&prv, SIGNAL(paintRequested(QPrinter *)), &textEdit, SLOT(print(QPrinter *)));

Но все равно не понятно где использовать QPrinter::newPage()  ?
Я так понимаю нужно переопределять процесс рендеринга QTextEdit ?


Записан
spectre71
Гость
« Ответ #10 : Июнь 10, 2009, 11:27 »

Тебе не нужен QTextEdit - он занимается визуализацией QTextDocument, согласно его текущим размерам, настройкам итд.

Тебе нужен QTextDocument.
void QTextDocument::print ( QPrinter * printer ) const
Записан
spectre71
Гость
« Ответ #11 : Июнь 10, 2009, 11:47 »

Код
C++ (Qt)
class CQTextEdit : public QTextEdit
{
Q_OBJECT
public:
CQTextEdit(QWidget* parent): QTextEdit(parent) {}
 
private slots:
void print(QPrinter *);
};
 
void CQTextEdit::print(QPrinter* p)
{
QTextEdit::print(p);
}
 
void MainWindow::on_testButton_clicked()
{
 CQTextEdit* TextEdit = new CQTextEdit(this);
 TextEdit->setHtml(...);
 
 QPrinter printer(QPrinter::HighResolution);                                              
 QPrintPreviewDialog prv(&printer);
 QObject::connect(&prv, SIGNAL(paintRequested(QPrinter *)), TextEdit, SLOT(print(QPrinter *)));
 prv.exec();
}
 
Все отлично разбивается по страницам.
Записан
itan
Гость
« Ответ #12 : Июнь 10, 2009, 13:07 »

Получилось! Вот что я хотел на самом деле:
Код
C++ (Qt)
class CQTextEdit : public QTextEdit
{
Q_OBJECT
public:
CQTextEdit(QWidget* parent): QTextEdit(parent) {}
 
private slots:
void print(QPrinter *);
};
 
void CQTextEdit::print(QPrinter* p)
{
QTextEdit::print(p);
}
 
void MainWindow::on_testButton_clicked()
{
 CQTextEdit* textEdit = new CQTextEdit(this);
 
 QTextBlockFormat blockFmt;
 blockFmt.setPageBreakPolicy(QTextFormat::PageBreak_AlwaysBefore);
 QTextCursor cur(textEdit->document());
 cur.insertHtml("<b> First Page </b>");
 cur.insertBlock(blockFmt);
 cur.insertHtml("<b> Second Page </b>");
 cur.insertBlock(blockFmt);
 cur.insertHtml("<b> Third Page </b>");
 
QPrinter printer(QPrinter::HighResolution);                                              
QPrintPreviewDialog prv(&printer);
QObject::connect(&prv, SIGNAL(paintRequested(QPrinter *)), textEdit, SLOT(print(QPrinter *)));
prv.exec();
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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