QT implémente l'assistant de débogage série (4): thème de réglage QSS, ajout d'une liste de commandes de raccourci

Code source du projet: https://github.com/zhangfls/QT_UartAnalysisTool

 

Article précédent: QT réalise un assistant de débogage de port série (3)

 

1. Fonction de réglage du thème

1. Initialisez la barre de menus

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

2. Placez le fichier de style QSS dans un dossier désigné, par exemple, le nom du dossier est qss

3. Recherchez le fichier de filtre

    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. En fonction des fichiers trouvés, générez le répertoire de la barre de menu

    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. La méthode de mise à jour du style appelé par le répertoire ci-dessus se connecte:

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. De cette manière, un catalogue fonctionnel de paramètres de thème peut être généré et vous pouvez changer de thème en cliquant sur différents éléments. Bien sûr, le nom du répertoire peut être optimisé

Deux, créez un menu de liste de commandes de cache

1. Mettez un widget de table sur l'interface

2. Initialisez la 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. Traitez le bouton d'envoi correspondant à chaque commande

//发送数据
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. De cette manière, le panneau de commande correspondant peut être généré, cliquez sur le bouton et le contenu de la plaine de données correspondante peut être envoyé

 

Suivant:

QT réalise l'assistant de débogage du port série (5): accès au fichier ini aux informations du port série

Je suppose que tu aimes

Origine blog.csdn.net/zhangfls/article/details/110222800
conseillé
Classement