• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

QPrint - znika mi alignment

VPS Starter Arubacloud
0 głosów
372 wizyt
pytanie zadane 16 listopada 2017 w C i C++ przez Eliro Stary wyjadacz (12,160 p.)
edycja 19 listopada 2017 przez Eliro
void NotepadWindow::on_actionPrint_triggered()
{
    QString text = ui->textEdit->document()->toPlainText();

    QPrinter printer;

    QPrintDialog *dialog = new QPrintDialog(&printer);
    dialog->setWindowTitle("Print Document");

    QPainter painter;
    painter.begin(&printer);
    painter.drawText(100, 100, 500, 500, Qt::AlignLeft|Qt::AlignTop, text);

    painter.end();
}

 

Problem w tym, że mój notatnik ma funkcję wyśrodkowania tekstu za pomocą 

ui->textEdit->setAlignment(Qt::AlignCenter);

 

i niestety plik xps, który się generuje w wyniku powyższego kodu (wersja do wydrukowania), wszystko wyrównuje od lewej i align:center jest całkowicie pominięty. Jakieś pomysły?

1 odpowiedź

0 głosów
odpowiedź 17 listopada 2017 przez obl Maniak (51,280 p.)
wybrane 26 listopada 2017 przez Eliro
 
Najlepsza

W tym kawałku kodu:

painter.drawText(100, 100, 500, 500, Qt::AlignLeft|Qt::AlignTop, text);

wyraźnie jest zapisane, że wyrównywanie jest do lewej (AlignLeft) i do góry (AlignTop) zmienna text, której przypisałeś wartość wyciągniętą z textEdit nie zawiera formatowania tylko czysty tekst. W kontrolce typu QTextEdit sformatowany kod jest kodem HTML-4, można go uzyskać za pomocą metody toHtml, ale wątpię, żeby metoda drawText brała takie formatowanie pod uwagę przy rysowaniu. Znalazłem taki przykład, który ponoć umożliwia poprawną interpretację takiego kodu:

    QPainter painter(this);
    QTextDocument td;
    td.setHtml("K<sub>max</sub>=K<sub>2</sub> &middot; 3");
    td.drawContents(&painter);

https://stackoverflow.com/questions/29892203/draw-rich-text-with-qpainter

komentarz 19 listopada 2017 przez Eliro Stary wyjadacz (12,160 p.)
Dzięki wielkie! Niemal wszystko już działa! Jesteś wielki! :D

 

Tylko jest jedno ale - wersja do wydruku nadal ustawia wszystko od lewej :/
komentarz 20 listopada 2017 przez obl Maniak (51,280 p.)

Bo żeby wyrównywało do środka, lewej czy wyjustowało tekst musisz określić wymiary strony:

printer.setPageSizeMM(QSize(210, 297));

 

komentarz 25 listopada 2017 przez Eliro Stary wyjadacz (12,160 p.)
void NotepadWindow::on_actionPrint_triggered()
{

    QPrinter printer;
    printer.setPageSizeMM(QSize(210, 297));

    QPrintDialog *dialog = new QPrintDialog(&printer);
    dialog->setWindowTitle("Print Document");

    QPainter painter;
    painter.begin(&printer);

    QTextDocument td;
    td.setHtml(ui->textEdit->toHtml());
    td.drawContents(&painter);
    //painter.drawText(printer.pageRect(), ui->textEdit->toPlainText());

    painter.end();
}

 

 

???

komentarz 26 listopada 2017 przez obl Maniak (51,280 p.)

Tak, to powinno pomóc, chociaż pewności 100% nie mam bo nie mam jak to sprawdzić. Jeżeli ci nie działa to jeszcze można spróbować ustawić rozmiar dokumentu w QTextDocument:

QSize size(2100, 2970);
textDocument.setPageSize(size);

problem polega na tym, że tutaj podajesz rozmiar w px a drukarka używa mm aby to przeliczyć trzeba znać ustawienia dpi (rozdzielczości drukowania). Generalnie jak używam QTextDocument do wyświetlania tekstu z ustawionym rozmiarem strony to wyśrodkowanie i wyrównanie do prawej działa. Nie działa mi tylko wyjustowanie.

komentarz 26 listopada 2017 przez Eliro Stary wyjadacz (12,160 p.)

Po przeliczeniu ustawiłem tak:

    QSize size(793.7007874016, 1122.519685039);
    td.setPageSize(size);

i działa. Dzięki Wielkie! :D

Podobne pytania

0 głosów
1 odpowiedź 220 wizyt
pytanie zadane 10 czerwca 2015 w C i C++ przez gnx Dyskutant (7,720 p.)
0 głosów
1 odpowiedź 161 wizyt
pytanie zadane 20 września 2021 w C i C++ przez tonn204 Mądrala (7,440 p.)
0 głosów
1 odpowiedź 296 wizyt

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...