Russian Qt Forum

Qt => Печать => Тема начата: Maverick от Апрель 08, 2010, 15:41



Название: Как вывести принтер из спящего режима?
Отправлено: Maverick от Апрель 08, 2010, 15:41
Здравствуйте!
При реализации функций печати текстового редактора у меня возникла следующая проблема. Перед выводом текста на принтер проверяю состояние принтера вот таким образом:

 
Код:
int check_printer()
{
int fd, res;
unsigned char status = 0;

QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));

fd = open("/dev/lp0", O_RDONLY);
if (fd < 0)
{
QApplication::restoreOverrideCursor();
return PRINTER_OFFLINE;
}

res = ::ioctl(fd, LPGETSTATUS, &status);
sleep(1);
::close(fd);

QApplication::restoreOverrideCursor();

// out of paper
if (status & LP_POUTPA)
return PAPER_EMPTY;

if (!(status & LP_PERRORP))
return PRINTER_ERR;

if (!(status & LP_PSELECD))
return PRINTER_OFFLINE;

if (status & LP_PBUSY)
return PRINTER_BUSY;

return PRINTER_OK;
}

При этом программа нормально отслеживает включен принтер или нет и наличие бумаги в лотке принтера. Но все это лишь до того момента, пока принтер не находится  в режиме энергосбережения. Когда принтер засыпает, программа не получает состояния принтера и выводит статус "принтер не отвечает". Если не проверять состояние принтера, документ выводится нормально. Но в таком случае нельзя отследить наличие бумаги и включение принтера. Можно ли решить эту проблему? Каким образом можно отследить "спящий" принтер и "разбудить" его перед печатью? И если И если можно то каким образом? Разработка ведется под Linux с ядром 2.6 в Qt версии 4.4.3. Заранее спасибо.


Название: Re: Как вывести принтер из спящего режима?
Отправлено: Пантер от Апрель 08, 2010, 16:33
Смотреть документацию по конкретному принтеру.


Название: Re: Как вывести принтер из спящего режима?
Отправлено: panAlexey от Апрель 08, 2010, 22:59
Как вывести принтер из спящего режима?
Код:
 QSound::play("mysounds/bells.wav"); 
Не подойдет? :)


Название: Re: Как вывести принтер из спящего режима?
Отправлено: altai от Сентябрь 04, 2010, 18:02
хм, а не проще отправить на печать а cups (или аналог, используемый вами) сам добавит в очередь печати и разбудит...