Russian Qt Forum
Ноябрь 22, 2024, 17:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPrinter падает, пототму что CreateDC вернула NULL  (Прочитано 5012 раз)
Caduceus
Гость
« : Февраль 04, 2011, 14:43 »

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

Не понимаю - на Windwows7 падает QPrinter потому что внутри конструктора CreateDC возвращает NULL
Почему так может быть?

Код в студию
Записан
Caduceus
Гость
« Ответ #2 : Февраль 04, 2011, 15:44 »

Так собственно в контсрукторе диалога в самом начале вот это вызываю -
m_printer = new QPrinter( QPrinter::PrinterResolution );

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

Пробовал не в самом начале. Пробовал когда уже окно появится - все равно падает
Записан
kirill
Гость
« Ответ #3 : Февраль 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);
  }
 
 
 
Записан
Caduceus
Гость
« Ответ #4 : Февраль 04, 2011, 16:07 »

Так он на конструкторе QPrinter падает - у вас это первая строчка
Записан
kirill
Гость
« Ответ #5 : Февраль 04, 2011, 16:09 »

Так он на конструкторе QPrinter падает - у вас это первая строчка

Есть разница между пустым конструктором и конструктором с параметром
Записан
Caduceus
Гость
« Ответ #6 : Февраль 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)
---------------------------
Прервать   Повтор   Пропустить   
---------------------------
Записан
maxxant
Гость
« Ответ #7 : Февраль 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.


Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.071 секунд. Запросов: 20.