QT每天一个小技巧

前言

使用QT进行开发的过程中,经常发现一些实用的小技巧,有时候能给开发带来不少便捷。因此,写下此文积累一些这方面的知识,便于自己查阅以及给广大开发者提供一些参考。

正文

1. QString与其他类型互转,以及格式化问题

1.1 整形转QString

10进制

    int a = 100;
    QString str = QString::number(a);

16进制

    int a = 100;
    QString str = QString::number(a, 16);

保留指定位数,不足补0,实现类似printf()函数的功能

// 输出"001"
int a=1;
QString str0 = QString::number(a).sprintf("%03d",a)        // 方法1
QString str1 = QString("%1").arg(a, 3, 10, QChar('0'));    // 方法2

1.2 QString转整形

QString num_str = "123";
int num = num_str.toInt();        // 10进制                

QString hex_str = "30FF";
bool ret;
int num2 = hex_str.toInt(&ret, 16);    // 16进制,第一个参数也可以填NULL    

1.3 QString的截取

QString str = "abc123";

str.letf(2);          // "ab"
str.right(4);         // "c123"
str.mid(1, 3);        // "bc1"   
str.remove(0, 2);     // "c123"
str.remove("abc");    // "123"

1.4 QString转char *

方法1:

QString qstr = "Hello, world!";
const char *cstr = qstr.toStdString().c_str();

方法2:

另一种方法是使用QString的toLocal8Bit()、toUtf8()、toLatin1()方法,将QString转换为QByteArray,然后使用QByteArray的date()方法获取char *。注意toLatin1()方法只适用于包含ASCII字符的字符串。对于包含非ASCII字符的字符串,这可能会导致数据损坏。

QString qstr = "Hello, world!";
QByteArray ba = qstr.toLocal8Bit(); // 或者使用 toUtf8()、toLatin1()
const char *cstr = ba.data();

方法3:

QString有一个toUtf8()方法,它返回一个QByteArray。然后,我们可以使用QByteArray的data()方法来获取一个指向字符数组的指针。

QString qstr = "Hello, world!";
char *cstr = qstr.toUtf8().data();

1.5 char *转QString

使用QString的构造函数,或者用fromUtf8()等方法,后者可以指定数据源的编码格式。

char cstr[] = "Hello";
QString qstr0 = QString(cstr);
QString qstr1 = QString::fromUtf8(cstr);

2. QByteArray与其他类型互转

2.1 quint8、char数组转QByteArray

调用QbyteArray的setRawDate方法

quint8 cmd_raw[9] = {0x55, 0xAA, 0x00, 0xA1, 0x00, 0x01, 0xC0, 0x82, 0xA5};
    
QByteArray cmd;
cmd.setRawData((char *)cmd_raw, sizeof(cmd_raw));

QString show = cmd.toHex().toUpper();    // 输出hex字符串形式,字母大写

也可使用构造函数

const char *c_str = "abc123";
QByteArray qa1(str);            // 遇到'\0'即止
    
char u8_arr[3] = {0x11, 0x22, 0x33};
QByteArray qa2(u8_arr, 3);

2.2 QByteArray转quint8、char数组

直接调用data方法

QByteArray ba("123");
char *c_str = ba.data();        // 如需uint8_t可进行强制转换        

2.3 QString转QByteArray

Hex格式string转QByteArry。

QString hexString = "112233AABB";
QByteArray ByteArray = QByteArray::fromHex(hexString.toLocal8Bit());

2.4 QByteArray转QString

如果QByteArray的内容是hex string,可以调用toHex()方法。

QByteArray byte_array;
QString hex_string = byte_array.toHex().toUpper();    // 十六进制,大写

如果QByteArray的内容是普通字符串,可以调用date()方法获得char *,然后调用QString()构造函数生成QString。

     QByteArray byre_array;
     QString qstr = QString(byre_array.data());

3. QTextEdit问题

3.1 文本编辑框和行编辑框强制英文输入法

有些场景下输入框只需要输入英文,如果输入中文则会引起错误,这个时候可以通过如下方法设置编辑框的属性,使之输入时强制系统输入法为英文输入法。

QTextEdit *te = new QTextEdit();
te->setAttribute(Qt::WA_InputMethodEnabled, false);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值