【QT】关于字符串处理的一些方法

1.字符串拆分

我们要拆分这样一个字符串:

\r\n1\r\n>\r\nAPC\r\n>\r\n-60.00 dBm\r\n>\r\nInvalid parameters\r\n>\r\n29.3 C\r\n>\r\n30.7 C\r\n>\r\n30.1 C\r\n>\r\n30.1 C\r\n>\r\nPUMP1: 2.5 mA\r\nPUMP2: 53.2 mA\r\n

我们要提取想要的信息,就要将不想要的字符去除掉:

QStringList list = rxbuf.split(QRegExp("[\r\n>]"),QString::SkipEmptyParts);

去除完毕之后会拆分出相应的列表组:我们定义一个字符串类型来存放它们。

        QString STAT = list[0];
        QString MODE = list[1];
        QString INPO = list[2];
        QString OUTO = list[3];
        QString NMTE = list[4];
        QString HITE = list[5];
        QString MOTE = list[6];
        QString CATE = list[7];
        QString PUM1 = list[8];
        QString PUM2 = list[9];
        QString ILT = list[10];
        QString OLT = list[11];
        QString PTARGET = list[12];

之后将其用laber来显示:

        QString INPOnum = INPO;
        ui->lblIndBm->setText(INPOnum);
        ui->lblIndBm->setStyleSheet("color:rgb(0,255,0)");

2. 字符串发送:

2.1 PushButton

对于固定的字符串指令,我们可以这样书写,通过按钮的clicked()信号来释放其功能:

void masMainWindow::on_btnOpen_clicked()
{
   QString buf = "set mute 0\r\n";
   const char *temp=buf.toLocal8Bit().data();
   currentPort->write(temp);
}

对于获取相应值再发送的字符串指令,我们可以这样处理:

2.2 PushButton+SpinBox

假如我们要发送:"set ilt -8.00 \r\n"

我们可以将其分成三个字符串:set ilt -8.00 \r\n

其中中间的数值我们是通过SpinBox来获取的。那么获取其字符串类型后还要将其转化为想要的数据类型比如double,如果要进行数字处理,那就乘以相应的系数。然后再将其转化为字符串类型。然后利用append和prepend将其拼接。最后将其利用串口发送出去。

void masMainWindow::on_btnINalarm_clicked()
{
    QString buf = "set ilt ";
    QString buf1 = "\r\n";
    QString str = ui->doubleSpinBoxIN->text();
    double numin = str.toDouble();
    QString strin = QString::number(numin);
    buf.append(strin);
    buf1.prepend(buf);
    const char *temp=buf1.toLocal8Bit().data();
    currentPort->write(temp);
}

2.3 PushButton+SpinBox+Slider

这里要实现拉条和SpinBox的联动。这条函数实现了拉条的数值和SpinBox统一。

/**
 * @brief ADC拉条
 */
void masMainWindow::on_horizontalSliderADC_valueChanged(int value)
{
    ui->spinBoxADC->setValue(value);
}

这条实现了SpinBox和拉条的数值统一。

/**
 * @brief ADC控件
 */
void masMainWindow::on_spinBoxADC_valueChanged(int value)
{
    ui->horizontalSliderADC->setValue(value);
}

这条利用获取到的SpinBox的数值,进行数据发送:

/**
 * @brief ADC输出按钮
 */
void masMainWindow::on_btnSetADC_clicked()
{
    QString buf = "set dac2 ";
    QString buf1 = "\r\n";
    QString str = ui->spinBoxADC->text();
    int numadc = str.toInt();
    QString stradc = QString::number(numadc);
    buf.append(stradc);
    buf1.prepend(buf);
    const char *temp=buf1.toLocal8Bit().data();
    currentPort->write(temp);
}

3. 指示灯函数

有时候我们需要指示灯来显示状态:

 这里其实就用一个laber就可以实现:

函数如下:

/***********************************指示灯控件*************************************/
// 该函数将label控件变成一个圆形指示灯,需要指定颜色color以及直径size
// color 0:grey 1:red 2:green 3:yellow
// size  单位是像素
void masMainWindow::setLED(QLabel* label, int color, int size)
{
    // 将label中的文字清空
    label->setText("");
    // 先设置矩形大小
    // 如果ui界面设置的label大小比最小宽度和高度小,矩形将被设置为最小宽度和最小高度;
    // 如果ui界面设置的label大小比最小宽度和高度大,矩形将被设置为最大宽度和最大高度;
    QString min_width = QString("min-width: %1px;").arg(size);              // 最小宽度:size
    QString min_height = QString("min-height: %1px;").arg(size);            // 最小高度:size
    QString max_width = QString("max-width: %1px;").arg(size);              // 最小宽度:size
    QString max_height = QString("max-height: %1px;").arg(size);            // 最小高度:size
    // 再设置边界形状及边框
    QString border_radius = QString("border-radius: %1px;").arg(size/2);    // 边框是圆角,半径为size/2
    QString border = QString("border:1px solid black;");                    // 边框为1px黑色
    // 最后设置背景颜色
    QString background = "background-color:";
    switch (color) {
    case 0:
        // 灰色
        background += "rgb(190,190,190)";
        break;
    case 1:
        // 红色
        background += "rgb(255,0,0)";
        break;
    case 2:
        // 绿色
        background += "rgb(0,255,0)";
        break;
    case 3:
        // 黄色
        background += "rgb(255,255,0)";
        break;
    default:
        break;
    }

    const QString SheetStyle = min_width + min_height + max_width + max_height + border_radius + border + background;
    label->setAlignment(Qt::AlignCenter);
    label->setStyleSheet(SheetStyle);
}

我们想令其显示时就可以这样书写:第一个参数是控件,第二个颜色,第三个尺寸。

setLED(ui->label_pumpLED, 2, 20);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米杰的声音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值