【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);
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt中,Dll是一个动态链接库(Dynamic Link Library),用于在运行时提供可共享的函数、类和资源。在使用Qt的过程中,我们可以将一些公共的代码打包成Dll文件,并在需要的时候动态加载和使用这些代码。字符串回调是指在某些情况下,我们需要传递一个字符串作为参数,然后通过回调函数来处理这个字符串。 在Qt中,可以通过使用Q_FUNC_POINTER宏来定义函数指针类型,然后使用typedef关键字给函数指针类型取一个别名。接下来,我们可以通过声明函数指针类型的变量,并将回调函数赋值给这个变量,来实现字符串回调的功能。 下面是一个简单的例子,演示了如何在Qt中使用Dll和字符串回调: 1.首先,我们可以创建一个名为mydll的Qt项目,并在.pro文件中添加库文件的路径和名称: LIBS += -L"path_to_dll" -ldll_name 2.在dll项目中,我们定义了一个用于处理字符串的回调函数callback: // mydll.h文件 typedef void(*StringCallback)(const QString&); extern "C" __declspec(dllexport) void setCallback(StringCallback callback); // mydll.cpp文件 StringCallback g_callback = nullptr; extern "C" __declspec(dllexport) void setCallback(StringCallback callback){ g_callback = callback; } // 在需要处理字符串的地方,我们可以调用回调函数来处理字符串: QString str = "Hello"; if(g_callback){ g_callback(str); } 3.在使用dll的项目中,我们可以使用QLibrary类来动态加载dll,并获取其中的函数: QLibrary myDll("mydll.dll"); if(myDll.load()){ typedef void(*SetCallbackFunc)(StringCallback); SetCallbackFunc setCallbackFunc = (SetCallbackFunc)myDll.resolve("setCallback"); if(setCallbackFunc){ setCallbackFunc(callbackFunction); } } // callbackFunction是一个回调函数,用于处理字符串 以上就是Qt中如何使用Dll来实现字符串回调的简单介绍。通过使用Dll和回调函数,我们可以在Qt项目中实现模块化的设计,提高代码的重用性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

米杰的声音

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

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

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

打赏作者

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

抵扣说明:

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

余额充值