Russian Qt Forum

Qt => Печать => Тема начата: Caduceus от Февраль 04, 2011, 14:43



Название: QPrinter падает, пототму что CreateDC вернула NULL
Отправлено: Caduceus от Февраль 04, 2011, 14:43
Не понимаю - на Windwows7 падает QPrinter потому что внутри конструктора CreateDC возвращает NULL
Почему так может быть?


Название: Re: QPrinter падает, пототму что CreateDC вернула NULL
Отправлено: kirill от Февраль 04, 2011, 15:37
Не понимаю - на Windwows7 падает QPrinter потому что внутри конструктора CreateDC возвращает NULL
Почему так может быть?

Код в студию


Название: Re: QPrinter падает, пототму что CreateDC вернула NULL
Отправлено: Caduceus от Февраль 04, 2011, 15:44
Так собственно в контсрукторе диалога в самом начале вот это вызываю -
m_printer = new QPrinter( QPrinter::PrinterResolution );

вот тут и падает

Пробовал не в самом начале. Пробовал когда уже окно появится - все равно падает


Название: Re: QPrinter падает, пототму что CreateDC вернула NULL
Отправлено: kirill от Февраль 04, 2011, 15:49
Так собственно в контсрукторе диалога в самом начале вот это вызываю -
m_printer = new QPrinter( QPrinter::PrinterResolution );

вот тут и падает

Пробовал не в самом начале. Пробовал когда уже окно появится - все равно падает

Qt 4.7.1 VS2008 Win7 - имеется несколько принтеров в системе - всё работает.
Что то припоминаю было такое на предыдущих версиях Qt если в системе не было установлено принтера.
Попробуй так
Код
C++ (Qt)
  printer_ = new QPrinter();
  bool hasPrinters = QPrinterInfo::availablePrinters().count();
  if (hasPrinters)
  {
     printer_->setPrinterName(QPrinterInfo::defaultPrinter().printerName());
  }
  else
  {
     printer_->setOutputFormat(QPrinter::PdfFormat);
  }
 
 
 


Название: Re: QPrinter падает, пототму что CreateDC вернула NULL
Отправлено: Caduceus от Февраль 04, 2011, 16:07
Так он на конструкторе QPrinter падает - у вас это первая строчка


Название: Re: QPrinter падает, пототму что CreateDC вернула NULL
Отправлено: kirill от Февраль 04, 2011, 16:09
Так он на конструкторе QPrinter падает - у вас это первая строчка

Есть разница между пустым конструктором и конструктором с параметром


Название: Re: QPrinter падает, пототму что CreateDC вернула NULL
Отправлено: Caduceus от Февраль 04, 2011, 16:12
То же самое

---------------------------
Microsoft Visual C++ Debug Library
---------------------------
Debug Error!

Program: e:\Projects\__\aaa.exe
Module: 4.6.2
File: global\qglobal.cpp
Line: 2230

ASSERT: "hdc" in file painting\qprintengine_win.cpp, line 1048

(Press Retry to debug the application)
---------------------------
Прервать   Повтор   Пропустить   
---------------------------


Название: Re: QPrinter падает, пототму что CreateDC вернула NULL
Отправлено: maxxant от Февраль 07, 2011, 00:27
Мои предположения:
1. QPrinter должен создаваться после QApplication.
2. попробовать сначала QPrinterInfo::availablePrinters().count() как писали выше, но только до создания QPrinter, если принтеров нет- можно не создавать.
3. переход на более позднюю версию Qt, например:

 changes-4.6.3
...
 - QWin32PrintEngine
    * [QTBUG-9938] Fixed a crash on Windows 7 systems with invalid PrinterPorts
      registry entries.