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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt и ESC/Pos последовательности или как командовать принтером  (Прочитано 7439 раз)
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-последовательность на принтер? Заранее спасибо Улыбающийся
Записан
V1KT0P
Гость
« Ответ #1 : Апрель 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);
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Апрель 07, 2012, 14:36 »

Код
C++ (Qt)
qTextStream << 29;   // вывод int
qTextStream << "\29"; // вывод строки (из 1 char)
qTextStream << '\29'; // вывод 1 char
 
Записан
V1KT0P
Гость
« Ответ #3 : Апрель 07, 2012, 15:10 »

Код
C++ (Qt)
qTextStream << "\29";
qTextStream << '\29';
 
FAIL!
В первом случае 2 символа('\2' и '9'), во втором даже не скомпилится.
Кстати 86 это же просто буква V, то-есть это должно работать:
Код
C++ (Qt)
qTextStream << "V";
 
Правда как тогда на чеке эту букву печатать...
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Апрель 07, 2012, 15:18 »

FAIL!
В первом случае 2 символа('\2' и '9'), во втором даже не скомпилится.
Ну не придирайтесь, помнить есть ли \29 я не справочник. Смысл один и тот же - надо лить в поток тип char (а не что-то другое). Это всегда можно сделать через static_cast или не мудрствуя лукаво
Код
C++ (Qt)
qTextStream << char(29);
 
Записан
fisherr
Гость
« Ответ #5 : Апрель 07, 2012, 16:04 »

Да. Вариант с char'ом работает!  Улыбающийся Всем большое спасибо. Вопрос закрыт.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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