QT实现串口调试助手(四):QSS设置主题、添加快捷命令列表

工程源码:https://github.com/zhangfls/QT_UartAnalysisTool

上一篇:QT实现串口调试助手(三)

一、主题设置功能

1、初始化菜单栏

    QMenuBar *menuBar = ui->menuBar;
    QMenu *pFile = menuBar->addMenu("主题设置");

2、将QSS样式文件放在一个指定文件夹下,比如文件夹名为qss

3、查找过滤文件

    QDir dir1("/qss/");
    QFileInfoList list;
    QStringList filters;
    if(dir1.exists())
    {
        dir1.setFilter(QDir::Files); //加过滤器,选择后缀为qss的文件
        filters << "*qss";
        dir1.setNameFilters(filters);
        list = dir1.entryInfoList();
    }
    else
    {
        qDebug()<<"qss不在盘根目录";
        QDir dir2("qss/");
        if(dir2.exists())
        {
            dir2.setFilter(QDir::Files); //加过滤器,选择后缀为qss的文件
            dir2.setNameFilters(filters);
            list = dir2.entryInfoList();
        }
        else
        {
            qDebug()<<"qss不在程序根目录";
        }
    }

4、根据查找到的文件,生成菜单栏的目录

    if(list.size()>1)
    {
        QFileInfo fileInfo;
        QList<QAction*> actions;
        foreach (fileInfo, list)
        {
            qDebug()<<fileInfo.fileName();
            actions.append(new QAction(fileInfo.fileName()));
        }
        for(QAction *ac:actions)
        {
            pFile->addActions(actions);
            connect(ac,&QAction::triggered,
                        [=] ()
                        {
                            updateMainStyle(ac->text());
                        }
                        );
        }
    }

5、上面目录connect调用的更新样式的方法:

void MainWindow::updateMainStyle(QString style)
{
    //QSS文件初始化界面样式
    QFile qss("qss/"+style);
    if(qss.open(QFile::ReadOnly))
    {
        qDebug()<<"qss load";
        QTextStream filetext(&qss);
        QString stylesheet = filetext.readAll();
        this->setStyleSheet(stylesheet);
        qss.close();
    }
    else
    {
        qDebug()<<"qss not load";
        qss.setFileName("/qss/"+style);
        if(qss.open(QFile::ReadOnly))
        {
            qDebug()<<"qss load";
            QTextStream filetext(&qss);
            QString stylesheet = filetext.readAll();
            this->setStyleSheet(stylesheet);
            qss.close();
        }
    }
}

6、这样就可以生成主题设置的功能目录了,点击不同项可以切换主题。当然目录名称可以再优化一下

扫描二维码关注公众号,回复: 12958569 查看本文章

二、创建缓存的命令列表菜单

1、在界面上放一个table Widget

2、初始化table

//初始化命令列表
void MainWindow::CmdListInit()
{
    QStringList headerText;
    headerText<<"HEX"<<"数据"<<"发送";
    ui->tableWidget->setColumnCount(headerText.count());

    for(int i = 0;i<headerText.count();i++)
    {
        ui->tableWidget->setHorizontalHeaderItem(i,new QTableWidgetItem(headerText.at(i)));
    }

    ui->tableWidget->setColumnWidth(0,30);
    ui->tableWidget->setColumnWidth(1,200);
    ui->tableWidget->setColumnWidth(2,60);

    for(int i=0;i<100;i++)
    {
        ui->tableWidget->insertRow(i);

        QCheckBox *box = new QCheckBox();
        ui->tableWidget->setCellWidget(i,0,box);

        QLineEdit *line = new QLineEdit();
        ui->tableWidget->setCellWidget(i,1,line);

        QPushButton *button = new QPushButton();
        button->setText("点击");
        ui->tableWidget->setCellWidget(i,2,button);
        connect(button,&QPushButton::clicked,
                    [=] ()
                    {
                        sendButtonClick(line->text());
                    }
                    );
    }
}

3、处理每个命令对应的发送按钮

//发送数据
void MainWindow::sendButtonClick(QString command)
{
    //未打开串口则不准发送
    if(ui->openSerialButton->text() == "打开串口")
    {
        QMessageBox::warning(NULL, "警告", "未打开可用串口,无法发送数据!\r\n\r\n");
        return;
    }

    //获取发送的命令,并选择在结尾加上换行,AT的命令结尾必须有回车换行
    if(ui->changeLineCheckBox->isChecked())
    {
        command += "\r\n";
    }

    if(ui->timeZoneCheckBox->isChecked())
    {
         curDateTime = QDateTime::currentDateTime();
         ui->uartReadPlain->insertPlainText("\r\n"+curDateTime.toString("[yyyy-MM-dd hh:mm:ss]")+"SEND:"+command);
    }

    send_buf_len += command.length();
    ui->TXLenLabel->setText(QString::number(send_buf_len)+"bytes");

    serial->write(command.toLatin1());
}

4、这样就可以生成对应的命令面板了,点击按钮,就可以发送对应数据plain里的内容了

下一篇:

QT实现串口调试助手(五):ini文件存取串口信息

猜你喜欢

转载自blog.csdn.net/zhangfls/article/details/110222800