英汉词典链接
英汉词典
密码: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("没有找到!");//遍历后没有结果
}
在一个槽函数初始化的类,如何在另一个槽函数调用。