gpt4 book ai didi

c++ - qt:如何向POS打印机发送控制命令?

转载 作者:行者123 更新时间:2023-11-28 02:47:55 26 4
gpt4 key购买 nike

我正在创建一个通过 POS 打印机打印文本的应用程序。

打印效果很好。但对于 POS 打印机,有控制命令来执行某些功能,如:切纸、打开现金提取等。例如:

功能:局部切割代码:

  • ASCII————-> ESC i
  • 十六进制————-> 1B 69
  • 十进制——> 27 105

当我尝试发送命令 27 105 时,它只是打印在纸上而不是执行操作。我不确定如何发送它......有人可以建议如何写入套接字...... #include "lanprinterui.h" #include "ui_lanprinterui.h"

LanPrinterUI::LanPrinterUI(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::LanPrinterUI)
{
ui->setupUi(this);

m_TextInput = ui->textEdit;
m_pSocket = new QTcpSocket();
m_pSocket->connectToHost("192.168.1.20", 9100);
m_ConnectStatus = true;

QObject::connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(print()));
}

LanPrinterUI::~LanPrinterUI()
{
delete ui;
delete m_pSocket;
}

void LanPrinterUI::print()
{
const int Timeout = 5 * 1000;

if (!m_ConnectStatus)
{
m_pSocket->connectToHost("192.168.1.20", 9100);
}

if (!m_pSocket->waitForConnected(Timeout))
{
//sent error
qDebug ("error in waitForConnected()");
qDebug (qPrintable(m_pSocket->errorString()));
m_ConnectStatus = false;
return;
}

m_ConnectStatus = true;
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
out << m_TextInput->toPlainText();
out << '\n';
m_pSocket->write(block);
}

最佳答案

你想要的是

out << "\n\x1Bi";

也就是说,您希望在 '\n' 字符之后发送 '\x1B' 字符(也称为“转义”)和 'i' 字符。你也可以这样写:

out << '\n' << "\x1b\x69";

或:

out << '\n' << char(27) << char(105);

或:

out << '\n' << char(0x1b) << char(0x69);

(或任何其他有效组合)

另一个更好的主意是在你的类(class)中加入:

class LanPrinterUI {
private:
static const QString PARTIAL_PAPER_CUT = "\x1bi";
static const QString CASHDRAWER_OPEN = "\x1b....";
//...
};

然后你就可以:

out << '\n' << PARTIAL_PAPER_CUT;

(这将比硬编码常量好得多)

关于c++ - qt:如何向POS打印机发送控制命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23780841/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com