Important: Please read the Qt Code of Conduct -

QPrintDialog can not set custom paper size

  • i am using QPrintDialog for specifying the printer's configuration.
    This is how i tried:

    QTextDocument *document = new QTextDocument();
    QPrinter printer;
    QPrintDialog *dlg = new QPrintDialog(&printer,0);
    dlg->setOption( QAbstractPrintDialog::PrintToFile,        false );
    dlg->setOption( QAbstractPrintDialog::PrintSelection,     true );
    dlg->setOption( QAbstractPrintDialog::PrintPageRange,     false );
    dlg->setOption( QAbstractPrintDialog::PrintShowPageSize,  true );
    dlg->setOption( QAbstractPrintDialog::PrintCollateCopies, false );
    dlg->setOption( QAbstractPrintDialog::PrintCurrentPage, false );
    if(dlg->exec() == QDialog::Accepted)
        //pre set paper size to A5
    delete dlg;
    delete document;

    By default i set paper size to A4, everything is ok
    But when dialog open and i set any different paper size(like A5) then it is back to A4.
    My question is that how can i set custom paper size to the printer?

    p/s My OS is ubuntu 16.04


  • @hooanghiep
    It may not help you, but under Ubuntu/Mint/etc. I believe yours is same as reported recently in ?

  • @JonB thanks for your inform :)

  • @hooanghiep

    Do you really need a custom size or is your paper just not standard A4 / A5 / A3?
    Here are all default paper size options.



    a valid format?

    What happens, if you comment this "printer.setPageSize(QPrinter::A4);//default" line? I think your selection gets overwritten by your default value (A4).
    Have you tried to debug output the actual paper size while the dialog is running?


    To get the current QPageSize use pageLayout().pageSize().
    You should call this before calling QPainter::begin(), or immediately before calling newPage() to apply the new page size to a new page. You should not call any painting methods between a call to setPageSize() and newPage() as the wrong paint metrics may be used.
    Returns true if the page size was successfully set to pageSize.

    EDIT: Maybe you have to set the PageSize to EnumVal "30" (= ::Custom) first, to make the printer accept your own values?

Log in to reply