Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: juvf от Март 23, 2015, 11:00



Название: QPrintDialog без принтера
Отправлено: juvf от Март 23, 2015, 11:00
Сделал вывод на принтер с использованием QPrintDialog. В windows 7, если нет принтера, то выскакивает диалог с принтером "Установка принтера". В Windows XP, если нет принтера, то вообще диалог QPrintDialog не появляется. На этоже хр паинтбрашь вызывает такой диалог. Как заставить QPrintDialog появиться подобно в паинтбраше?


Название: Re: QPrintDialog без принтера
Отправлено: qate от Март 23, 2015, 13:14
переписать QPrintDialog
я замечал что если принтера нет, или принтер сетевой и не доступен - можно получить зависания программы пока она это не поймет


Название: Re: QPrintDialog без принтера
Отправлено: juvf от Март 23, 2015, 13:41
есть мысль проверить до вызова QPrintDialog наличие принтера. Как это можно сделать?


Название: Re: QPrintDialog без принтера
Отправлено: popper от Март 24, 2015, 19:08
QList<QPrinterInfo> QPrinterInfo::availablePrinters () [static]


Название: Re: QPrintDialog без принтера
Отправлено: juvf от Март 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. Жму принт... кнопка нажалась и никакой реакции. Как так? Как минимум бы конпку задизейблить....


Название: Re: QPrintDialog без принтера
Отправлено: qate от Март 25, 2015, 08:38
QList<QPrinterInfo> QPrinterInfo::availablePrinters () [static]

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


Название: Re: QPrintDialog без принтера
Отправлено: juvf от Март 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()


Название: Re: QPrintDialog без принтера
Отправлено: qate от Март 25, 2015, 12:52
заюзал availablePrinterNames()

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