QT實現單詞檢索軟件的示例代碼
功能介紹
1、可檢測出英文內容中某個單詞出現的次數
2、可從英文內容中提取以某個字母為首的所有單詞
3、可將修改的內容從新保存到txt文件中
源代碼
.pro文件
無增改
.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
QString aFilename;//添加部分
private slots:
void on_openpushButton_clicked();//添加部分(無需手動添加)
void on_savepushButton_clicked();//添加部分(無需手動添加)
void on_numpushButton_clicked();//添加部分(無需手動添加)
void on_wordpushButton_clicked();//添加部分(無需手動添加)
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
.cpp文件(不含main函數的那個)
#include "widget.h"
#include "ui_widget.h"
#include<QFileDialog>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->findtextEdit->setText("將檢索內容復制于此!");
ui->resulttextEdit->setText("檢索結果顯示于此!");
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_openpushButton_clicked()//用來打開一個txt文本文件
{
QString curpath=QDir::currentPath();
QString dlgTitle="打開一個文件";
QString filter="程序文件(*.h *.cpp);;文本文件(*.txt);;所有文件(*.*)";
aFilename=QFileDialog::getOpenFileName(this,dlgTitle,curpath,filter);
QFile afile(aFilename);
afile.open(QIODevice::ReadOnly|QIODevice::Text);
ui->findtextEdit->setText(afile.readAll());
afile.close();
}
void Widget::on_savepushButton_clicked()//用以保存txt文本文件
{
QFile afile(aFilename);
afile.open(QIODevice::WriteOnly|QIODevice::Text);
QString str=ui->findtextEdit->toPlainText();
QByteArray strbyte=str.toUtf8();
afile.write(strbyte,strbyte.length());
afile.close();
}
bool is_word(QString s)//用于判斷字符是否為英文字符
{
QByteArray byte = s.toUtf8();
if((int(byte.at(0))>=65&&int(byte.at(0))<=90)||(int(byte.at(0))>=97&&int(byte.at(0))<=122))
{
return true;
}
else
{
return false;
}
}
bool delete_thesame(QString &word,QStringList &w_list)//相同的單詞將不進行二次存儲,保證檢索處來的每個單詞具有唯一性
{
for(int i=0;i<w_list.size();i++)
{
if(w_list.at(i).compare(word,Qt::CaseInsensitive)==0)
{
return false;
}
}
return true;
}
void get_word(int &index,QString &word,QStringList &w_list,QString &str)//將目標單詞單詞進行添加存儲
{
while(index+1<=str.length()&&is_word(str.at(index)))
{
word+=str.at(index);
index++;
}
if(delete_thesame(word,w_list))
{
w_list.append(word);
}
word="";
}
void Widget::on_numpushButton_clicked()
{
QString word=ui->wordlineEdit->text();//獲取內容
int NUM=0; //初始化檢索單詞次數為0
QString text = ui->findtextEdit->toPlainText();
QStringList number_list = text.split("\n");
for (int i = 0; i < number_list.size(); ++i)
{
int is_ok=1;//若為0,則表明字符串中已經沒有我們需要的單詞了
int index=-word.length();
QString str0=":"+number_list.at(i)+":";//“:”是為了方便后面的編程
while(is_ok)
{
index=str0.indexOf(word,word.length()+index);//這里需要去理解indexof函數的作用
if(index!=-1){
if(!is_word(str0.at(index+word.length()))&&!is_word(str0.at(index-1)))//判斷目標單詞是否為一個個體,即該單詞的首尾是否為非英文字符(上面“:”的作用體現于此)
NUM++;
}
else {
is_ok=0;
}
}
}
ui->numlineEdit->setText(QString::number(NUM,10));
}
void Widget::on_wordpushButton_clicked()
{
int A_is_a;
int index=0;
//是否發(fā)現on_numpushButton_clicked()函數中也出現如下兩句
QString text = ui->findtextEdit->toPlainText();
QStringList word_list = text.split("\n");
//判斷yesradioButton和noradioButton按鈕是否被選中
if(ui->yesradioButton->isChecked()) A_is_a=1;
if(ui->noradioButton->isChecked()) A_is_a=0;
QString none=ui->alphabetlineEdit->text();//獲取內容
QString word;
QStringList w_list;
for (int i = 0; i < word_list .size(); ++i)
{
QString str = word_list .at(i);
index=0;//初始化檢索下標為0
while(index+1<=str.length())
{
if((index==0||!is_word(str.at(index-1)))&&is_word(str.at(index)))//若該字符為英文,且其前面為非英文
{
switch(A_is_a)
{
case 1:
if(none.compare(str.at(index))==0)
{
get_word(index,word,w_list,str);
}
else
{
while(index+1<=str.length()&&is_word(str.at(index)))
{
index++;
}
}
break;
case 0:
if(none.compare(str.at(index),Qt::CaseInsensitive)==0)
{
get_word(index,word,w_list,str);
}
else
{
while(index+1<=str.length()&&is_word(str.at(index)))
{
index++;
}
}
break;
default:break;
}
}
else
{
index++;
}
}
}
ui->resulttextEdit->clear();
for(int i=0;i<w_list.count();i++)
{
ui->resulttextEdit->append(w_list.at(i));
}
}
.ui文件

對應程序中的自定義控件名稱如下:
findtextEdit:3
resulttextEdit:4
wordlineEdit:6
numlineEdit:9
alphabetlineEdit:5openpushButton:1
savepushButton:2
numpushButton:7
wordpushButton:8yesradioButton:是
noradioButton:否
Label控件僅僅在ui中修改標題內容,程序中沒有其它操作,所以作者選擇默認系統(tǒng)給的名稱。
到此這篇關于QT實現單詞檢索軟件的示例代碼的文章就介紹到這了,更多相關QT 單詞檢索軟件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++11新特性“=default”,“=delete”的使用
=default、=delete 是C++11的新特性,分別為:顯式缺省(告知編譯器生成函數默認的缺省版本)和顯式刪除(告知編譯器不生成函數默認的缺省版本),本文就來介紹一下如何使用2021-05-05

