Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QPrintDialog: Cannot be used on non-native printers



  • Ciao a tutti,

    creo una nuova applicazione Qt widget in Qt creator e metto il seguente codice sul click di un bottone

      QList<QPrinterInfo> plist = QPrinterInfo::availablePrinters();
      qDebug() << "numbers of printers:" << plist.length();
    
      foreach (QPrinterInfo pinfo, plist) {
        qDebug() << "printer name:" << pinfo.printerName();
      }
    
      QPrinterInfo pinfo;
      QPrinter printer(QPrinter::HighResolution);
    
      if (!pinfo.defaultPrinter().isNull()) {
        qDebug() << "default printer name:" << pinfo.defaultPrinterName();
        printer.setPrinterName(pinfo.defaultPrinterName());
      }
    
      QPrintDialog dialog(&printer, this);
      if (dialog.exec() == QDialog::Accepted) {
      }
    

    tutto funziona correttamente, questo è il risultato.

    e8014123-5efd-4c17-ae1f-278e89a26c03-immagine.png

    Inserisco lo stesso identico codice nella mia "applicazione princicpale" e la chiamata dialog.exec() non si ferma, non mi appare il QPrintDialog e mi ritorna il seguente errore:
    QPrintDialog: Cannot be used on non-native printers

    9f47760d-4e9a-4c1e-86cd-6cd5b3ab713c-immagine.png

    Anche il numero di stampanti... mi ritorna 0.

    Non so più dove sbattere la testa...
    Ogni suggerimento è ben accetto!
    Grazie in anticipo.



  • Di solito questo succede se passi un puntatore nullo come primo argomento a QPrintDialog::QPrintDialog(QPrinter*,QObject*). nel tuo esempio QPrintDialog dialog(&printer, this);, &printer non puo' mai essere nullptr quindi funziona sempre



  • @VRonin grazie della risposta.
    Pensavo alle differenze tra i due progetti... Nell'applicazione principale ho dentro Lime Report, non so se potrebbe dare qualche problema... domani provo a rimuoverlo temporaneamente e vediamo se l'errore scompare.



  • Niente... sempre lo stesso risultato.

    numbers of printers: 0
    QPrintDialog: Cannot be used on non-native printers
    QPrintDialog: Cannot be used on non-native printers



  • Il problema è legato alla mancanza del file windowsprintersupportd.dll.

    Dalla dentro la cartella in cui risiede il file compilato del progetto ho lanciato il comando windeployqt
    C:\Qt\5.14.2\msvc2017_64\bin\windeployqt.exe --debug .

    --debug solamente perchè non sono in release

    Il windeploy mi ha creato una nuova cartella chiamata printsupport con al suo interno al dll windowsprintersupportd.dll.
    Ora lanciando l'applicazione da QtCreator riesco a recuperare le stampanti.


Log in to reply