Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[QT] Drukowanie QTableWidget

Ostatnio zmodyfikowano 2015-02-25 22:23
Autor Wiadomość
soket
Temat założony przez niniejszego użytkownika
[QT] Drukowanie QTableWidget
» 2015-02-22 17:54:35
Witam
Chciałem w swojej aplikacji dać użytkownikom możliwość wydrukowania tabeli(QTableWidget) do pdf.
Problem w tym że tabela ma 50 wierszy i 8 kolumn które nie mieszczą się na ekranie, a na wydruku widać tylko to co jest aktualnie na ekranie.
Tak wygląda kod:
C/C++
void Program::on_drukuj_clicked()
{
    QPrinter printer;
    QPrintDialog printer_dialog( & printer );
    if( printer_dialog.exec() == QDialog::Accepted ) {
        QPainter painter( & printer );
       
        painter.scale( 0.5, 0.5 );
       
        ui->tabelaRez->render( & painter );
    }
}

Czy istnieje możliwość aby wydrukować np. wiersze od 20 do 40 i tylko 4 kolumny?

P-127132
turaz
» 2015-02-22 20:37:52
Gotowej metody na to raczej nie ma (nie kojarzę).
Nie wiem, czy próbowałeś w ten sposób: http://stackoverflow.com​/questions/9769680​/printing-qtableview-using-render-method
Widzę, że jest też jakaś infomacja na blogu Digii: http://blog.qt.io/blog/2012/08​/24​/qt-commercial-support-weekly-​25-printing-large-tables-2​/
P-127162
soket
Temat założony przez niniejszego użytkownika
» 2015-02-25 22:23:46
Dzięki za linki. Gdyby ktoś kiedyś stanął przed podobnym problemem do rozwiązania to podaje tu swoją wersję.

C/C++
void Program::on_drukuj_clicked()
{
    QPrinter printer;
    QPrintDialog printer_dialog( & printer );
    if( printer_dialog.exec() == QDialog::Accepted ) {
        QPainter painter( & printer );
       
        QTableView * pTableView = new QTableView;
        pTableView->setModel( ui->tabelaRez->model() );
       
        int width = 0;
        int height = 0;
        int columns = 10;
        int rows = 50;
       
        painter.scale( 0.75, 0.75 );
       
       
        for( int i = 0; i < columns; ++i ) {
            width += pTableView->columnWidth( i );
        }
       
        for( int i = 0; i < rows; ++i ) {
            height += pTableView->rowHeight( i );
        }
        width += 100;
        height += 100;
       
        pTableView->setFixedSize( width, height );
        pTableView->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
        pTableView->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
       
        pTableView->render( & painter );
    }
}
P-127382
« 1 »
  Strona 1 z 1