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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPrintDialog без принтера  (Прочитано 5104 раз)
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« : Март 23, 2015, 11:00 »

Сделал вывод на принтер с использованием QPrintDialog. В windows 7, если нет принтера, то выскакивает диалог с принтером "Установка принтера". В Windows XP, если нет принтера, то вообще диалог QPrintDialog не появляется. На этоже хр паинтбрашь вызывает такой диалог. Как заставить QPrintDialog появиться подобно в паинтбраше?
Записан
qate
Супер
******
Offline Offline

Сообщений: 1176


Просмотр профиля
« Ответ #1 : Март 23, 2015, 13:14 »

переписать QPrintDialog
я замечал что если принтера нет, или принтер сетевой и не доступен - можно получить зависания программы пока она это не поймет
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #2 : Март 23, 2015, 13:41 »

есть мысль проверить до вызова QPrintDialog наличие принтера. Как это можно сделать?
Записан
popper
Гость
« Ответ #3 : Март 24, 2015, 19:08 »

QList<QPrinterInfo> QPrinterInfo::availablePrinters () [static]
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #4 : Март 25, 2015, 06:20 »

проблему решил
Цитировать
            if(QPrinterInfo::availablePrinterNames().size() < 1)
            {
                QMessageBox::critical(this, tr("Print error"), tr("There is no available printer"));
            }
            else
            {
                QPrintDialog preview(&printer, this);
                connect(&preview, SIGNAL(accepted(QPrinter *)), SLOT(printReport(QPrinter *)));
                preview.exec();
            }

Странно, когда нет принтеров, QPrintDialog не вызывается с 1 принтером "Add printer". На qt.io объяснили, что Qt кроссплатформенный и на разных осях разные способы добавления принтера. Ну да ладно.... согласен, пусть будет это забота программиста - перед вызовом проверить наличие принтера. Решил посмотреть в демках, как авторы это делают. Запустил пример TextEdit из QtDemo. Жму принт... кнопка нажалась и никакой реакции. Как так? Как минимум бы конпку задизейблить....
Записан
qate
Супер
******
Offline Offline

Сообщений: 1176


Просмотр профиля
« Ответ #5 : Март 25, 2015, 08:38 »

QList<QPrinterInfo> QPrinterInfo::availablePrinters () [static]

эта функция и может подвесить всю программу, надо назначить сетевой принтер дефолтным и выключить его
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #6 : Март 25, 2015, 12:17 »

QList<QPrinterInfo> QPrinterInfo::availablePrinters () [static]

эта функция и может подвесить всю программу, надо назначить сетевой принтер дефолтным и выключить его

в доках сказано
Цитировать
QList<QPrinterInfo> QPrinterInfo::​availablePrinters()
It is NOT recommended to use this as creating each printer instance may take a long time, especially if there are remote networked printers, and retained instances may become outdated if changes are made on the local system or remote print server. Use availablePrinterNames() instead and only instantiate printer instances as you need them.
заюзал availablePrinterNames()
Записан
qate
Супер
******
Offline Offline

Сообщений: 1176


Просмотр профиля
« Ответ #7 : Март 25, 2015, 12:52 »

заюзал availablePrinterNames()

да, наверно она лучше, но проблема в том что если использовать диалог предпросмотра, то что он там вызывает не подконтрольно

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


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