本文主要提提供一种基于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算法参考算法