用Qt实现Q-M算法化简逻辑表达式及Qt项目打包发布方法

4 篇文章 1 订阅

 本文主要提提供一种基于Q-M算法的逻辑表达式化简方法,并用Qt实现图形化的操作界面!

同时也提供了Qt项目的发布及打包方法!

效果图:输入最小项表达式,输出化简后的逻辑表达式!

  • 功能:输入最小项表达式的代数、逻辑式变量数、最小项个数,输出化简后的逻辑表达式
  • 输入错误提示

  •  输入最小项个数实时显示,一建填充

  • 一键清空输入输出

1.  Qt 核心代码

connect(ui->pushButton,&QPushButton::clicked,this,[=](){
       QString inputStr = ui->textEdit_inputMin->toPlainText();

       if(ui->textEdit_inputMin->document()->isEmpty()){
           QMessageBox::critical(this,"错误","请输入最小项表达式!");
           return;
       }

       if(ui->lineEdit_minNum->text().isEmpty()){
           QMessageBox::critical(this,"错误","请输入最小项表达式个数!");
           return;
       }

       if(ui->lineEdit_varNum->text().isEmpty()){
           QMessageBox::critical(this,"错误","请输入逻辑式变量个数!");
           return;
       }

       QStringList inputList = inputStr.split(',');


       int varNum = ui->lineEdit_varNum->text().toInt();
       int minNum = ui->lineEdit_minNum->text().toInt();

       // 清空之前的设置
       tab.initVarl_Clear();

       tab.initialise(varNum,minNum, inputList);
       tab.setPrimeImp();
       tab.minimise();
       tab.displayFunctions();

       tab.displayString.chop(2);       // 删除最后两个字符

       ui->textEdit_resultShow->setText(tab.displayString);

   });

   // 清空输入的最小项
   connect(ui->pushButton_clearnMin,&QPushButton::clicked,this,[=](){
       ui->textEdit_inputMin->clear();
   });

   // 清空输出的化简结果
   connect(ui->pushButton_clearnResult,&QPushButton::clicked,this,[=](){
       ui->textEdit_resultShow->clear();
       tab.displayString.clear();
   });

   // 实时显示实际输入最小项的个数
   connect(ui->textEdit_inputMin, &QTextEdit::textChanged,this,[=](){
       QString inputStr_actual = ui->textEdit_inputMin->toPlainText();

       QStringList inputList_actual = inputStr_actual.split(',');
       int minNum_Actual = inputList_actual.count();
       ui->lineEdit_minNumActual->setText(QString::number(minNum_Actual));
   });

   // 填入最小项
   connect(ui->pushButton_fillInMinLineEdit,&QPushButton::clicked,this,[=](){
        QString inpuMinNum_actual = ui->lineEdit_minNumActual->text();
        ui->lineEdit_minNum->setText(inpuMinNum_actual);
   });
  •  主要是通过ui把参数传递给Q-M算法,并通过按钮进行相关操作。
  • 用tab.initVarl_Clear();函数解决了原算法只能运行一次的bug

2. Qt相关笔记

  • 判断textEdit是否为空
ui->textEdit_inputMin->document()->isEmpty()
  • string 类型转为 QString 类型
string dataStr;

QString str = QString::fromStdString(dataStr);
  • int 类型转为 QString  类型
int i;
QString::number(i);
  •  QString 字符串后拼接新的字符串
QString displayString;
displayString.append("\n化简后所有可能的逻辑表达式为:\n");
  • QString 字符串从后向前删n个字符
 tab.displayString.chop(n);
  • 错误提示框
QMessageBox::critical(this,"错误","请输入最小项表达式!");

3 打包发布及注意事项

3.1 项目发布

(1) 选择对应的项目、构建套件(Kit)、Release

 

(2) 找到工程文件同级目录下的bu-xxx-Desktop_Qt_5_12_2_MinGW_32_bit-Release文件夹

 (3) 在该目录下的release文件夹下找到编译出的可执行文件

(4)把该xx.exe文件复制到一个新的文件夹下

 

 (5) 按Win键找出与上述编译Kit对应的命令框

 注意:一定要和编译时选择的构建套件(Kit)一致,否则无法运行,这里都是MinGW 32bit

(6) 打开(5)中的命令框,然后cd到(4)的文件路径下

 (7) 用windeployqt 命令生成依赖文件

格式:windeployqt xxx.exe

 最后生成相关依赖文件

 3.2 打包成一个xx.exe文件

这一步主要是把发布生成的xx.exe文件及相关依赖打包成一整个XXX.exe文件

(1)下载安装Enigma Virtual Box 

下载地址:Software Protection, Software Licensing, Software Virtualization (enigmaprotector.com)

(2) 打开 Enigma Virtual Box 进行相关配置

选择打包文件及定义输出文件路径、名称

 添加相关依赖并生成整个xx.exe文件

 4 项目源码及.exe文件

 可直接运行,

项目可运行程序及源码下载地址:

Qt实现QM算法图形化操作界面(含可运行程序及源码)-QT文档类资源-CSDN文库

QM算法参考算法

mohdomama/Quine-McCluskey: A Python/C++ implementation of Quine McCluskey(Tabulation) method. (github.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Triumph++

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

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

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

打赏作者

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

抵扣说明:

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

余额充值