1.主要功能,增 删 改 查
2.数据以文件形式处理




在写的过程遇到的问题
1.多按钮的如何获取按钮上的信息
性别这种单选的和兴趣这种多选的(radio button是我选的性别的按钮)如何获取控件上的信息?
首先性别和兴趣我分别合成两个组,sex_buttons和inter_buttons
其次是对性别组来说
QString sex=ui->sex_buttons->checkedButton()->text();
对于兴趣组来说,因为是多选所以要想设置一些属性,让其组件中的checkeBox不是独享的,方法可以是在ui中将inter_buttons属性中exclusive后的对号去掉,或者可以直接在文本中设置
ui->inter_buttons()->setExclusive(false);
兴趣由于是多个需要用QList<QAbstratButton*>inter的链来存放,各个兴趣之间用空格隔开
QList<QAbstactButton*>inter->ui->inter_buttons->buttons();
QString temp="";
for(int i=0;i<inter.size();i++)
{
if(inter[i]->checked())
{
temp.append(' ');
temp.append(inter[i]->text());
inter[i]->setChecked(false);
}
}
2.如何将信息保存在文件中
首先建立一个文件
QFile file("student.txt");
if(!file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append))
return;
其次将数据写入文件
QTextStream Out(&file);//文件写入流,括号中为写入文件的地址
Out<<name<<" "<<sex<<" "<<temp<<endl;//很方便的文件写入
3.static void fileread(QList<QString>stu_lines)
这个是自写函数,将文本里的内容读到容器链表中
QFile file("student.txt");
if(!file.open(QIODevice::ReadOnly|QIODevice::Text))
{
return;
}
while(!file.atEnd())
{
stu_lines.append(file.readLine());
}
static 在类中可以不用对象直接调用,在其他类中通过类名加上::调用很方便的
读取每行是file.readLine()
删除某行在容器中是stu_lines.removeAt(m_int)
4.如何将读到的内容显示在UI界面上
QString line=stu_lines[index];
QStringList subs=line.split(' ');//将字符串分成一个字符串链
ui->lineEdit_name->setText(subs[0]);
ui->lineEdit_id->setText(subs[1]);
QList <QAbstractButton*>se=ui->sex_buttons->buttons();
for(int i=0;i<se.size();i++)
{
if(se[i]->text()==subs[2])
{
se[i]->setChecked(true);
}
}
int ageint=ui->comboBox->findText(subs[3]);//返回与字符串相等的位置
ui->comboBox->setCurrentIndex(ageint);//设置属性
int subjectint=ui->comboBox_2->findText(subs[4]);
ui->comboBox_2->setCurrentIndex(subjectint);
QList<QAbstractButton*>inter=ui->interset_buttons->buttons();
for(int i=0;i<inter.size();i++)//将所有按钮设置为空,方便下次使用
{
inter[i]->setChecked(false);
}
for(int i=5;i<subs.size();i++)//多兴趣的设置
{
QString temp=subs[i].trimmed();//去除两端的空白,包括\n\t(这步骤很重要)
for(int j=0;j<inter.size();j++)
{
if(inter[j]->text()==temp)
{
inter[j]->setChecked(true);
break;
}
}
}
5.重写closeEvent函数(目的是在每次关闭的时候都会进行保存数据的操作)
在xx.h文件中
protected:
virtual void closeEvent (QCloseEvent *event));
在xx.cpp中
void closeEvent (QCloseEvent *event))
{
if(QMessageBox::Cancel==QMessageBox::warning(NULL,"Close me","Are you sure",\
QMessageBox::Ok|QMessageBox::Cancel))
{
event->ignore();
return;
}
QFile file("student.txt");
if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
{
return;
}
QTextStream out(&file);
for(int i=0;i<stu_lines.size();i++)
{
out<<stu_lines[i].trimmed()<<endl;
}
file.close();
}
6.数据的查询及表格的制作
QStandardItemModel * mytable;//用来保存数据的组织形式,每一项都是一个QStandardItem
先绘制表格
mytable=new QStandardItemModel;//new 一个对象,然后制作标题栏
mytable->setHorizontalHeaderItem(0,new QStandardItem(QObject::tr("Name")));
mytable->setHorizontalHeaderItem(1,new QStandardItem(QObject::tr("Id")));
mytable->setHorizontalHeaderItem(2,new QStandardItem(QObject::tr("Sex")) );
mytable->setHorizontalHeaderItem(3,new QStandardItem(QObject::tr("Age")));
mytable->setHorizontalHeaderItem(4,new QStandardItem(QObject::tr("Subject")));
mytable->setHorizontalHeaderItem(5,new QStandardItem(QObject::tr("Interest")));
ui->tableView->setModel(mytable);//将数据模型与QtableView联系在一起
ui->tableView->setColumnWidth(0,50);
ui->tableView->setColumnWidth(1,50);
ui->tableView->setColumnWidth(2,50);
ui->tableView->setColumnWidth(3,50);
ui->tableView->setColumnWidth(4,100);
ui->tableView->setColumnWidth(5,200);
添加数据
void Serch_student::doquery(int num,QString line_name)
{ int k=0;//第一行
for(int i=0;i<stu_lines.size();i++)
{
QString line=stu_lines[i];
QStringList subs=line.split(' ');//这两步合在一块,不然会有错误
if(num==0)
{
if(line_name!=subs[0])//第一个字符窜与line_edit的内容不一样,继续。num表示第几个属性参传过来
continue;
}
if(num==1)
{
if(line_name!=subs[1])
continue;
}
if(num==2)
{
if(line_name!=subs[2])
continue;
}
if(num==3)
{
if(line_name!=subs[3])
continue;
}
if(num==4)
{
if(line_name!=subs[4])
continue;
}
for(int j=0;j<5;j++)
{
mytable->setItem(k,j,new QStandardItem(subs[j]));
}
QString temp="";
for(int m=5;m<subs.size();m++)
{
temp+=subs[m];
temp.append("_");
}
mytable->setItem(k++,5,new QStandardItem(temp));
}
}
记得加头文件哦
QT QTableView用法小结
源码下载
网友评论