Как получить доступ к страницам QTextDocument

Я пытаюсь создать приложение, которое будет отображать форматированные текстовые документы с разбивкой на страницы - более или менее так, как это делает MS Word. На данный момент я хотел бы отображать только одну страницу за раз.

Из этого вопроса я узнал, что мне нужно представить документ с помощью QTextDocument. Хотя автор вопроса больше фокусируется на представлении view, я хотел бы узнать о доступе к документу data с разбивкой на страницы. Я вижу, что в классе есть такие методы, как setPageSize() и pageCount(). Вызов setPageSize(), похоже, соответственно обновляет pageCount().

Проблема в том, что я не знаю, как получить доступ к содержимому выбранной страницы, чтобы оно отображалось в QtextEdit.

(Я получаю доступ к Qt из Python с помощью библиотеки PySide)


person kmbt    schedule 08.04.2013    source источник


Ответы (1)


QTextEdit — это текстовый редактор, в котором на самом деле нет концепции страниц, вместо этого он сосредоточен на абзацах.

Вы можете создать свое собственное представление с разбивкой на страницы, которое будет учитывать размеры страницы, но Qt уже предоставляет его для вас. Посмотрите на QPrintPreviewWidget или QPrintPreviewDialog. Их легко использовать с QTextEdit.

Подкласс QTextEdit и реализовать следующие функции (функция preview является слотом Qt). Функция printPreview отобразит постраничное представление в диалоговом окне с содержимым вашего файла QTextEdit.

void MyTextEdit::printPreview(QPrinter *printer)
{
    QPrinter printer(QPrinter::HighResolution);
    QPrintPreviewDialog preview(&printer, this);
    connect(&preview, SIGNAL(paintRequested(QPrinter*)), SLOT(preview(QPrinter*)));
    preview.exec();
}

void MyTextEdit::preview(QPrinter *printer)
{
     print(printer);
}
person Daniel Hedberg    schedule 08.04.2013
comment
Спасибо за ваш ответ. Я попытаюсь перевести ваше решение на Python и посмотреть, как оно работает. - person kmbt; 09.04.2013