获得qstring字符串的长度(字节长度和所占的像素宽度)

本文介绍了在Qt中使用QString时如何正确计算字符串长度的方法,包括Unicode与本地8位编码的区别,并展示了如何获取字符串在屏幕上的显示宽度。

1.QString 用length()返回字符串的长度,即字节数, 在中英文字符都是以 Unicode 方式编码的,所以,无论中英文都算的长度为 1。
想要取得英文长度为 1 中文长度为 2 的总长度,必须用toLocal8bit()。具体使用方法如下所示:
QString s = "ab中文";
int length = s.length(); //length = 4;
length = s.toLocal8Bit().length(); //length = 6
2.以上都是获取的字符串字节的长度,但是如果要在屏幕上显示,获取所占的像素个数,这样获取是不对的,应该按如下方式:
QFont wordfont;
wordfont.setFamily("宋体");
wordfont.setPointSize(10);
QFontMetrics fm(wordfont);
m_pLabel->setText("名称不合法");
QRect rec = fm.boundingRect( m_pLabel->text());
int ii = rec.width();//这个就获得了字符串所占的像素宽度



//二维码扫描 void MainWindow::on_pushButton_26_clicked() { // if(com4Exists) { // QMessageBox::critical(this, "Error", "COM4 not found!"); // return; // } //检查串口是否关闭状态 if (serial->isOpen()) { serial->close(); } disconnect(serial, &QSerialPort::readyRead, this, &MainWindow::readScanData); // 设置串口名称 serial->setPortName("COM4"); // 打开串口(读模式) if (!serial->open(QIODevice::ReadOnly)) { QMessageBox::critical(this, tr("Error"), tr("Can't open COM4")); return; } serial->setBaudRate(QSerialPort::Baud9600); serial->setDataBits(QSerialPort::Data8); serial->setParity(QSerialPort::NoParity); serial->setStopBits(QSerialPort::OneStop); serial->setFlowControl(QSerialPort::NoFlowControl); // QString barcode = QString::fromLatin1(data).trimmed(); // 转换为字符串 // //displayEdit->setText(barcode); // 显示到UI控件 // ui->lineEdit_26->setText(barcode); //连接串口数据接收钮信号 // connect(serial, &QSerialPort::readyRead, // this, &MainWindow::readScanData); connect(serial, &QSerialPort::readyRead, this, &MainWindow::readScanData, Qt::UniqueConnection); // QTimer::singleShot(1000, this, [this]() { if (serial->isOpen()) { serial->close(); disconnect(serial, &QSerialPort::readyRead, this, &MainWindow::readScanData); if (ui->lineEdit_26->text().isEmpty()) { QMessageBox::information(this, tr("Timeout"), tr("No scan data received")); } } }); // 清空缓冲区 // scanDataBuffer.clear(); } void MainWindow::readScanData() { disconnect(serial, &QSerialPort::readyRead, this, &MainWindow::readScanData); //读取所有可用数据 QByteArray data = serial->readAll(); QString scanResult; scanResult = QString::fromUtf8(data).trimmed(); ui->lineEdit_26->setText(QString::fromUtf8(data)); }将读出来的信息全部按照lineEdit_26大小完全显示
最新发布
09-19
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值