【QT】实例五---英汉词典的单词查询(QDialog)(补)

本文介绍了一个使用QT开发的英汉词典查询应用实例。通过读取本地词典文件,实现了单词查询功能,并展示了如何在QT界面中添加控件并调用相关函数。包括了两种实现方式:一种是在.cpp文件中直接编写槽函数,另一种是通过按钮触发单词查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

英汉词典链接

英汉词典
密码:1qii
遇到问题:
qt 在ui界面添加控件后在cpp文件中无法调用?
重新构建项目。

注意单词文件放置的路径。在test()构造函数中要与自己电脑的相匹配。注意路径不要有汉字!
在这里插入图片描述

源代码

#include <iostream>
#include <string>
#include <fstream>
#include <map>
#include <algorithm> 
using namespace std;

class test
{
private:
	string s,s1;
	string::size_type n;
	ifstream f;
	map<string,string>a;
	map<string,string>::iterator p;
public:
	test()
	{
		f.open("dict.txt",ios::in);	
		if(!f) cout<<"file open error!"<<endl;
		else
		{
			while(!f.eof())
			{
				getline(f,s);
				n=s.find(" ",0);
				s1=s.substr(0,n);
				a.insert(pair<string,string>(s1,s));
			}
		}
	}
	~test()
	{
		f.close();		
	}
	string Find(string word)
	{
		string temp;
		p=a.find(word);
		if(p!=a.end())
			temp=p->second;
		else
			temp="no word!";
		return temp;
	}
};
 
int main()
{
	test t;
	string temp;
	while(true)
	{
		cout<<"input a word(0-over):";cin>>temp;
		if(temp=="0")break;
		cout<<t.Find(temp)<<endl;
	}
	return 0;
}

移植代码

在这里插入图片描述
在这里插入图片描述
需要转换函数,进行string和QString的相互转换。

string qstr2cstr(QString qs)//QString转化为cstr
{
    QByteArray cdata = qs.toLocal8Bit();
    return string(cdata);
}
QString cstr2qstr(string cs)//cstr转化为QString
{
    return QString::fromLocal8Bit(cs.data());
}

槽函数

void Dialog::on_pushButton_clicked()
{
    QString s;
    s=ui->lineEdit->text();
    //========
    string word,ss;
    word=qstr2cstr(s);
    test t;
    ss=t.Find(word);
    s=cstr2qstr(ss);
    ui->lineEdit_2->setText(s);
}

第二种实现例子

在这里插入图片描述

ui设计

两个lineEdit,一个单词文本用于查单词,另一个显示查询结果。
两个pushbutton,读取文件和查单词。
一个listWidget显示所有单词。
在这里插入图片描述

在.cpp内直接写槽函数

读文件函数:

void Dialog::on_pushButton_clicked()
{
    string s;
    ifstream f("d:\\temp\\dict.txt",ios::in);
    if(!f)
        ui->lineEdit->setText("读取文件错误");
    else
    {
        while(true)
        {
            getline(f,s);//取每一行添加
            ui->listWidget->addItem(QString::fromLocal8Bit(s.data()));//把c++字符串转为qt字符串且保证没有中文乱码
            if(f.eof()) break;//如果读到了文件末尾。退出
        }
    }
    f.close();
}

查单词函数:

QString word1(QString s)
{
    QString temp;
    int n=s.indexOf(" ");//索引到空格
    temp=s.mid(0,n); //取子串
    return temp;
}

void Dialog::on_pushButton_2_clicked()
{
    QString word,temp;
    word=ui->lineEdit->text();
    int n=ui->listWidget->count();//遍历n
    int i;
    for(i=0;i<n;++i)
    {
        temp=ui->listWidget->item(i)->text();//temp等于该行的信息
        if(word==word1(temp))//word函数从temp中提取出空格前单词
        {
            ui->lineEdit_2->setText(temp);
            ui->listWidget->setCurrentRow(i);//把光标移动到这一行
            break;
        }
    }
    if(i==n) ui->lineEdit_2->setText("没有找到!");//遍历后没有结果
}

在一个槽函数初始化的类,如何在另一个槽函数调用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值