Your warranties manager
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 

107 строки
3.3 KiB

  1. #include "scannerdialog.h"
  2. #include "ui_scannerdialog.h"
  3. #include <QDir>
  4. #include <QDesktopServices>
  5. #include <QUrl>
  6. #include <QProcess>
  7. #include <QMessageBox>
  8. #include <iostream>
  9. #ifdef Q_OS_WIN32
  10. // Includes propre à Windows pour l'utilisation du scanner (via le service Windows Image Acquisition)
  11. #include <windows.h>
  12. #include <wia.h>
  13. #include <wiadef.h>
  14. #include <wiadevd.h>
  15. #include <wiavideo.h>
  16. #endif
  17. ScannerDialog::ScannerDialog(QWidget *parent) :
  18. QDialog(parent),
  19. ui(new Ui::ScannerDialog)
  20. {
  21. ui->setupUi(this);
  22. ui->progressBar->hide();
  23. }
  24. ScannerDialog::~ScannerDialog()
  25. {
  26. delete ui;
  27. }
  28. void ScannerDialog::on_btnTest_clicked()
  29. {
  30. #if defined Q_OS_LINUX
  31. ui->btnTest->setEnabled(false);
  32. ui->btnScan->setEnabled(false);
  33. ui->btnAnnuler->setEnabled(false);
  34. QProcess* process = new QProcess();
  35. process->setStandardOutputFile(QDir::tempPath() + "/test.pnm");
  36. process->start("scanimage");
  37. ui->progressBar->show();
  38. connect(process, SIGNAL(finished(int)), SLOT(scanTestFinished(int)));
  39. #endif
  40. }
  41. void ScannerDialog::scanTestFinished(int r = 0)
  42. {
  43. #if defined Q_OS_WIN32
  44. QMessageBox::information(this, "test", "ok");
  45. #elif defined Q_OS_LINUX
  46. ui->progressBar->hide();
  47. ui->btnTest->setEnabled(true);
  48. ui->btnScan->setEnabled(true);
  49. ui->btnAnnuler->setEnabled(true);
  50. std::string s = "convert " + QDir::tempPath().toStdString() + "/test.pnm " + QDir::tempPath().toStdString() + "/test.pdf";
  51. if(r == 0)
  52. {
  53. int c = system(s.c_str());
  54. if(c == 0)
  55. QDesktopServices::openUrl(QUrl("file://"+QDir::tempPath()+"/test.pdf"));
  56. else
  57. QMessageBox::critical(this, tr("Erreur"), tr("Votre document a pu être numérisé, mais un problème est survenu lors de son traitement.\nErreur %1").arg(QString::number(c)));
  58. }
  59. else
  60. QMessageBox::critical(this, tr("Erreur"), tr("Impossible de communiquer avec votre scanner. Vérifiez qu'il est bien relié à l'ordinateur' et qu'il est sous tension, puis réessayez.\nSi le problème persiste, il est probable que votre scanner ne soit pas pris en charge."));
  61. #endif
  62. }
  63. void ScannerDialog::on_btnScan_clicked()
  64. {
  65. #ifdef Q_OS_LINUX
  66. ui->btnTest->setEnabled(false);
  67. ui->btnScan->setEnabled(false);
  68. ui->btnAnnuler->setEnabled(false);
  69. QProcess* process = new QProcess();
  70. process->setStandardOutputFile(QDir::tempPath() + "/output.pnm");
  71. process->start("scanimage --resolution 200");
  72. ui->progressBar->show();
  73. connect(process, SIGNAL(finished(int)), SLOT(scanFinished(int)));
  74. #endif
  75. }
  76. void ScannerDialog::scanFinished(int r)
  77. {
  78. ui->progressBar->hide();
  79. std::string s = "convert " + QDir::tempPath().toStdString() + "/output.pnm " + QDir::tempPath().toStdString() + "/output.pdf";
  80. if(r == 0)
  81. {
  82. int c = system(s.c_str());
  83. if(c != 0)
  84. QMessageBox::critical(this, tr("Erreur"), tr("Votre document a pu être numérisé, mais un problème est survenu lors de son traitement.\nErreur %1").arg(QString::number(c)));
  85. else
  86. this->accept();
  87. }
  88. else
  89. QMessageBox::critical(this, tr("Erreur"), tr("Impossible de communiquer avec votre scanner. Vérifiez qu'il est bien relié à l'ordinateur' et qu'il est sous tension, puis réessayez.\nSi le problème persiste, il est probable que votre scanner ne soit pas pris en charge."));
  90. }