Russian Qt Forum

Qt => Вопросы новичков => Тема начата: fisherr от Апрель 07, 2012, 12:31



Название: Qt и ESC/Pos последовательности или как командовать принтером
Отправлено: fisherr от Апрель 07, 2012, 12:31
Всем привет. Есть чековый принтер, который подключен через com-порт. Информация для печати посылается в файл /dev/ttyS0 (ос Linux). Т.е. создается QFile*, QTextStream, после чего каждая строка печатается вот так:
Код:
qtextStream<<"это печатаем";
Есть в принтере отрезчик бумаги, который должен реагировать на ESC-последовательность. В инструкции от сего девайса есть описание его esc-команд. В частности, вот это:

GS V m
[name]   select cut mode and cut paper
[format]
ASCII   GS   V   m
HEX     1D   56  m
Dec     29   86  m

где m - режим отрезки. может быть равен 0, 1, 49 (hex или dec - не понятно). Собственно, не получается заставить принтер резать бумагу. Пробовал так:
Код:
qTextStream<<29;
qTextStream<<86;
qTextStream<<1;
и так:
Код:
qTextStream<<"\29";
qTextStream<<"\86";
qTextStream<<"\1";
и так:
Код:
qTextStream<<"\GS";
qTextStream<<"\V";
qTextStream<<"\1";
- не режет. Просто выводит на бумагу то, что в кавычках, а на данные без кавычек не реагирует совсем. Может у кого есть опыт как отправить эту самую ESC-последовательность на принтер? Заранее спасибо :)


Название: Re: Qt и ESC/Pos последовательности или как командовать принтером
Отправлено: V1KT0P от Апрель 07, 2012, 12:48
где m - режим отрезки. может быть равен 0, 1, 49 (hex или dec - не понятно). Собственно, не получается заставить принтер резать бумагу. Пробовал так:
Код:
qTextStream<<29;
qTextStream<<86;
qTextStream<<1;
и так:
Код:
qTextStream<<"\29";
qTextStream<<"\86";
qTextStream<<"\1";
и так:
Код:
qTextStream<<"\GS";
qTextStream<<"\V";
qTextStream<<"\1";
- не режет. Просто выводит на бумагу то, что в кавычках, а на данные без кавычек не реагирует совсем. Может у кого есть опыт как отправить эту самую ESC-последовательность на принтер? Заранее спасибо :)
Попробуй вот так:
Код
C++ (Qt)
quint8 esc = 29;
qTextStream<< static_cast<char>(esc);


Название: Re: Qt и ESC/Pos последовательности или как командовать принтером
Отправлено: Igors от Апрель 07, 2012, 14:36
Код
C++ (Qt)
qTextStream << 29;   // вывод int
qTextStream << "\29"; // вывод строки (из 1 char)
qTextStream << '\29'; // вывод 1 char
 


Название: Re: Qt и ESC/Pos последовательности или как командовать принтером
Отправлено: V1KT0P от Апрель 07, 2012, 15:10
Код
C++ (Qt)
qTextStream << "\29";
qTextStream << '\29';
 
FAIL!
В первом случае 2 символа('\2' и '9'), во втором даже не скомпилится.
Кстати 86 это же просто буква V, то-есть это должно работать:
Код
C++ (Qt)
qTextStream << "V";
 
Правда как тогда на чеке эту букву печатать...


Название: Re: Qt и ESC/Pos последовательности или как командовать принтером
Отправлено: Igors от Апрель 07, 2012, 15:18
FAIL!
В первом случае 2 символа('\2' и '9'), во втором даже не скомпилится.
Ну не придирайтесь, помнить есть ли \29 я не справочник. Смысл один и тот же - надо лить в поток тип char (а не что-то другое). Это всегда можно сделать через static_cast или не мудрствуя лукаво
Код
C++ (Qt)
qTextStream << char(29);
 


Название: Re: Qt и ESC/Pos последовательности или как командовать принтером
Отправлено: fisherr от Апрель 07, 2012, 16:04
Да. Вариант с char'ом работает!  :) Всем большое спасибо. Вопрос закрыт.