QT实现版本号比较功能

开发环境:Qt: 5.9.7    MacOS: 10.13.6

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void InitConnect();
    int VersionCompare(const QString &strVer1, const QString &strVer2);

public slots:
    void SlotVersionCompare();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QList>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    InitConnect();
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::InitConnect()
{
    connect(ui->pushButton_Compare, SIGNAL(clicked()), this, SLOT(SlotVersionCompare()));
}

int MainWindow::VersionCompare(const QString &strVer1, const QString &strVer2)
{
    if(!strVer1.compare(strVer2))
    {
        return 0;
    }

    QStringList verList1 = strVer1.split(".");
    QStringList verList2 = strVer2.split(".");

    int listCount1 = verList1.count();
    int listCount2 = verList2.count();
    int nCount = listCount1 > listCount2 ? listCount2 : listCount1;

    for(int i = 0; i < nCount; ++i)
    {
        bool bOK1 = false;//判断是否转换成成功
        bool bOK2 = false;
        int num1 = verList1[i].toInt(&bOK1);
        int num2 = verList2[i].toInt(&bOK2);
        if(!bOK1 || !bOK2)//转换失败返回0
        {
            return -2;
        }
        if(num1 == num2)
        {
            continue;
        }
        if(num1 > num2)
        {
            return 1;
        }
        else
        {
            return -1;
        }
    }

    return 0;
}

void MainWindow::SlotVersionCompare()
{
    QString strVer1 = ui->lineEdit_Ver1->text();
    QString strVer2 = ui->lineEdit_Ver2->text();
    int nResult = VersionCompare(strVer1, strVer2);
    QString strResult = tr("result: ");
    switch (nResult)
    {
        case -2:
            strResult = QString("版本号格式错误");
            break;
        case -1:
            strResult += QString("%1 小于 %2").arg(strVer1).arg(strVer2);
            break;
        case 0:
            strResult += QString("%1 等于 %2").arg(strVer1).arg(strVer2);
            break;
        case 1:
            strResult += QString("%1 大于 %2").arg(strVer1).arg(strVer2);
            break;
        default:
            break;
    }

    ui->label_Result->setText(strResult);
}



#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

结果:

猜你喜欢

转载自blog.csdn.net/chenyijun/article/details/86434728