当前位置: 首页 > news >正文

企业网站排名软件度智能优化网站的推广优化

企业网站排名软件度智能优化,网站的推广优化,做微商进哪个网站安全,做恐怖网站QSqlQueryModel 功能概述 QSqlQueryModel 是 QSqlTableModel 的父类。QSqlQueryModel 封装了执行 SELECT 语句从数据库查询数据的功能,但是 QSqlQueryModel 只能作为只读数据源使用,不可以编辑数据。QSqlQueryModel 类的主要函数如下: 接口…

QSqlQueryModel 功能概述

QSqlQueryModel 是 QSqlTableModel 的父类。QSqlQueryModel 封装了执行 SELECT 语句从数据库查询数据的功能,但是 QSqlQueryModel 只能作为只读数据源使用,不可以编辑数据。QSqlQueryModel 类的主要函数如下:

接口函数功能描述
void clear()清除数据模型,释放所有获得的数据
QSqlError lastError()返回上次的错误,可以获取错误的类型和文本信息
QSqlQuery query()返回当前关联的 QSqlQuery 对象
void setQuery(QSqlQuery& query)设置一个 QSqlQuery 对象,获取数据
void setQuery(QString& query)设置一个 SELECT 语句创建查询,获取数据
QSqlRecord record()返回一个空记录,包含当前查询的字段信息
QSqlRecord record(int row)返回行号为 row 的记录
int rowCount()返回查询到的记录条数
int columnCount()返回查询的字段个数
void setHeaderData(int section, Qt::Orientation orientation, QVariant& value)设置表头数据,一般用于设置字段的表头标题

使用 QSqlQueryModel 作为数据模型从数据库查询数据,只需要使用 setQuery() 函数设置一个 SELECT 查询语句即可。QSqlQueryModel 可以作为 QTableView 等视图组件的数据源,也可以使用 QDataWidgetMapper 创建字段与界面组件的映射,只是查询出来的数据是不可编辑的。

使用 QSqlQueryModel 实现数据查询

实例功能

image.png

使用 QSqlQueryModel 可以从一个数据表或多个数据表里查询数据,只要设计好 SELECT 语句即可。由于 QSqlQueryModel 读出的数据是只读的,所以没有编辑保存等功能,主窗口定义如下:

class MainWindow : public QMainWindow
{Q_OBJECTprivate:QLabel  *LabInfo;QSqlDatabase  DB; //数据库QSqlQueryModel  *qryModel; //数据模型QItemSelectionModel *theSelection; //选择模型QDataWidgetMapper   *dataMapper;//数据界面映射void    openTable();//打开数据表void    refreshTableView();//移动记录时刷新TableView的当前行
public:explicit MainWindow(QWidget *parent = 0);~MainWindow();private slots:// QTableView的SelectionModel的行发生了变化,进行处理void on_currentRowChanged(const QModelIndex &current, const QModelIndex &previous);
///void on_actOpenDB_triggered();void on_actRecFirst_triggered();void on_actRecPrevious_triggered();void on_actRecNext_triggered();void on_actRecLast_triggered();private:Ui::MainWindow *ui;
};

这里定义了 QSqlQueryModel 类型的数据模型变量 qryModel,也定义了数据库、选择模型和数据界面映射的变量。refreshTableView() 函数用于记录移动后刷新 TableView 上的当前行位置。自定义槽函数 on_currentRowChanged() 在选择模型的当前变化时,处理 Photo 字段的查询与照片显示。

打开数据库

openTable() 用于查询数据,简历界面显示等具体操作,代码如下:

void MainWindow::openTable()
{//打开数据表qryModel=new QSqlQueryModel(this);qryModel->setQuery("SELECT empNo, Name, Gender, Height, Birthday, Mobile, Province, City, Department, "" Education, Salary FROM employee ORDER BY empNo");if (qryModel->lastError().isValid()){QMessageBox::critical(this, "错误", "数据表查询错误,错误信息\n"+qryModel->lastError().text(),QMessageBox::Ok,QMessageBox::NoButton);return;}LabInfo->setText(QString::asprintf("记录条数:%d",qryModel->rowCount()));qryModel->setHeaderData(0,Qt::Horizontal,"工号");qryModel->setHeaderData(1,Qt::Horizontal,"姓名");qryModel->setHeaderData(2,Qt::Horizontal,"性别");qryModel->setHeaderData(3,Qt::Horizontal,"身高");qryModel->setHeaderData(4,Qt::Horizontal,"出生日期");qryModel->setHeaderData(5,Qt::Horizontal,"手机");qryModel->setHeaderData(6,Qt::Horizontal,"省份");qryModel->setHeaderData(7,Qt::Horizontal,"城市");qryModel->setHeaderData(8,Qt::Horizontal,"部门");qryModel->setHeaderData(9,Qt::Horizontal,"学历");qryModel->setHeaderData(10,Qt::Horizontal,"工资");theSelection=new QItemSelectionModel(qryModel);//选择行变化时connect(theSelection,SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),this,SLOT(on_currentRowChanged(QModelIndex,QModelIndex)));ui->tableView->setModel(qryModel);ui->tableView->setSelectionModel(theSelection);
//    ui->tableView->resizeColumnsToContents();
//    ui->tableView->horizontalHeader()->setStretchLastSection(true);//创建数据映射dataMapper= new QDataWidgetMapper();dataMapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);dataMapper->setModel(qryModel);dataMapper->addMapping(ui->dbSpinEmpNo,0);//"empNo";dataMapper->addMapping(ui->dbEditName,1);//"Name";dataMapper->addMapping(ui->dbComboSex,2);//"Gender";dataMapper->addMapping(ui->dbSpinHeight,3);//"Height";dataMapper->addMapping(ui->dbEditBirth,4);//"Birthday";dataMapper->addMapping(ui->dbEditMobile,5);//"Mobile";dataMapper->addMapping(ui->dbComboProvince,6);//"Province";dataMapper->addMapping(ui->dbEditCity,7);//"City";dataMapper->addMapping(ui->dbComboDep,8);//"Department";dataMapper->addMapping(ui->dbComboEdu,9);//"Education";dataMapper->addMapping(ui->dbSpinSalary,10);//"Salary";dataMapper->toFirst();ui->actOpenDB->setEnabled(false);
}

程序首先创建了 QSqlQueryModel 类型的私有变量 qryModel,然后调用 setQuery() 函数设置了 SELECT 查询语句,SELECT 语句从 employee 表里查询除了 Memo 和 Photo 之外的所有其他字段。使用 setHeadData() 函数为每个字段设置显示标题,为了代码简化,这里直接使用字段的序号。
qryModel 创建了选择模型 theSelection,并将其 currentRowChanged() 信号和自定义槽函数关联,查询出数据显示在界面上,槽函数代码如下:

void MainWindow::on_currentRowChanged(const QModelIndex &current, const QModelIndex &previous)
{Q_UNUSED(previous);if (!current.isValid()){ui->dbLabPhoto->clear();return;}dataMapper->setCurrentModelIndex(current);bool first=(current.row()==0); //是否首记录bool last=(current.row()==qryModel->rowCount()-1);//是否尾记录ui->actRecFirst->setEnabled(!first); //更新使能状态ui->actRecPrevious->setEnabled(!first);ui->actRecNext->setEnabled(!last);ui->actRecLast->setEnabled(!last);int curRecNo=theSelection->currentIndex().row();QSqlRecord  curRec=qryModel->record(curRecNo); //获取当前记录int empNo=curRec.value("EmpNo").toInt();QSqlQuery query; //查询当前empNo的Memo和Photo字段的数据query.prepare("select EmpNo, Memo, Photo from employee where EmpNo = :ID");query.bindValue(":ID",empNo);query.exec();query.first();QVariant    va=query.value("Photo");//if (!va.isValid())  //图片字段内容为空ui->dbLabPhoto->clear();else{//显示照片QByteArray data=va.toByteArray();QPixmap pic;pic.loadFromData(data);ui->dbLabPhoto->setPixmap(pic.scaledToWidth(ui->dbLabPhoto->size().width()));}QVariant    va2=query.value("Memo");//显示备注ui->dbEditMemo->setPlainText(va2.toString());
}

记录移动

用于数据映射的 QDataWidgetMapper 类设置数据模型后,总是指向数据模型的当前记录。QDataWidgetMapper 有四个函数进行当前记录移动,分别是 toFirst()toLast()toNext()toPrevious()。当前记录移动时,会引起数据模型关联的选择模型发射 currentRowChanged() 信号,触发槽函数。工具栏的四个移动按钮代码如下:

void MainWindow::on_actRecFirst_triggered()
{ //首记录dataMapper->toFirst();refreshTableView();
}void MainWindow::on_actRecPrevious_triggered()
{ //前一条记录dataMapper->toPrevious();refreshTableView();
}void MainWindow::on_actRecNext_triggered()
{//后一条记录dataMapper->toNext();refreshTableView();
}void MainWindow::on_actRecLast_triggered()
{//最后一条记录dataMapper->toLast();refreshTableView();
}

参考资料:https://github.com/0voice


文章转载自:
http://menacingly.c7495.cn
http://turbomolecular.c7495.cn
http://somnambulance.c7495.cn
http://stigmatism.c7495.cn
http://flocky.c7495.cn
http://sammy.c7495.cn
http://hyperlipidemia.c7495.cn
http://downtrend.c7495.cn
http://antagonize.c7495.cn
http://antifeedant.c7495.cn
http://krakau.c7495.cn
http://flaxen.c7495.cn
http://quaver.c7495.cn
http://wysiwyg.c7495.cn
http://phantasmagoria.c7495.cn
http://dromond.c7495.cn
http://undound.c7495.cn
http://antihyperon.c7495.cn
http://despite.c7495.cn
http://polyandry.c7495.cn
http://roentgenise.c7495.cn
http://polavision.c7495.cn
http://cabalist.c7495.cn
http://hoatching.c7495.cn
http://sensurround.c7495.cn
http://ajaccio.c7495.cn
http://twirp.c7495.cn
http://seedtime.c7495.cn
http://ploughback.c7495.cn
http://piccanin.c7495.cn
http://meninges.c7495.cn
http://mellifluous.c7495.cn
http://hysteric.c7495.cn
http://unleavened.c7495.cn
http://preliminary.c7495.cn
http://campaign.c7495.cn
http://thrapple.c7495.cn
http://pathlet.c7495.cn
http://okeydoke.c7495.cn
http://enzyme.c7495.cn
http://sapsago.c7495.cn
http://bloater.c7495.cn
http://controvertible.c7495.cn
http://termagancy.c7495.cn
http://unreachable.c7495.cn
http://oboist.c7495.cn
http://dualhead.c7495.cn
http://retainer.c7495.cn
http://supreme.c7495.cn
http://tess.c7495.cn
http://squilla.c7495.cn
http://gapemouthed.c7495.cn
http://atonal.c7495.cn
http://intercolumnar.c7495.cn
http://allopatric.c7495.cn
http://palmette.c7495.cn
http://cyke.c7495.cn
http://swazzle.c7495.cn
http://stringless.c7495.cn
http://undulation.c7495.cn
http://beak.c7495.cn
http://revolutionize.c7495.cn
http://gerefa.c7495.cn
http://starchy.c7495.cn
http://zoroastrianism.c7495.cn
http://datasheet.c7495.cn
http://carminite.c7495.cn
http://blockage.c7495.cn
http://mycetozoan.c7495.cn
http://heterogamy.c7495.cn
http://intraepithelial.c7495.cn
http://dermotropic.c7495.cn
http://chirospasm.c7495.cn
http://lisping.c7495.cn
http://comestible.c7495.cn
http://vilifier.c7495.cn
http://orthochromatic.c7495.cn
http://ayin.c7495.cn
http://viscose.c7495.cn
http://integrodifferential.c7495.cn
http://bacterioid.c7495.cn
http://colpotomy.c7495.cn
http://kirkcudbrightshire.c7495.cn
http://loudspeaker.c7495.cn
http://outgeneral.c7495.cn
http://alogical.c7495.cn
http://platinocyanic.c7495.cn
http://arbovirology.c7495.cn
http://indemnification.c7495.cn
http://retgersite.c7495.cn
http://temperately.c7495.cn
http://playdown.c7495.cn
http://talkative.c7495.cn
http://impassably.c7495.cn
http://aurist.c7495.cn
http://bilk.c7495.cn
http://sophistication.c7495.cn
http://coyly.c7495.cn
http://mammotropin.c7495.cn
http://reticulosis.c7495.cn
http://www.zhongyajixie.com/news/66884.html

相关文章:

  • 方维网站建设电商运营公司排名
  • 做软件下载网站怎么赚钱企业网络推广方案
  • 网站建设管理工作情况的通报百度关键词查询排名
  • vi设计网站运动康复厦门关键词优化报价
  • vs2015做网站如何添加控件谷歌网站推广
  • 做网站做软件怎么赚钱吗semester
  • app开发与网站开发的区别牡丹江seo
  • 江都建设银行网站产品营销方案策划
  • 怎么在ps里做网站设计宽带推广方案
  • 站长统计幸福宝网站统计免费手机网站建站平台
  • 建站工具有哪些cms写文章一篇30元兼职
  • wordpress产品展示主题下载天天seo伪原创工具
  • 同一个服务器的网站做友情链接厦门seo排名扣费
  • 凉山州建设厅官方网站中国十大热门网站排名
  • 建设包包网站的目的怎么找需要做推广的公司
  • 中国关于生态文明建设的网站网络优化
  • 罗湖做网站哪家好谷歌seo怎么做
  • 北京移动官网网站建设南宁做网站公司
  • 网站如何做移动规则适配新站整站优化
  • 北京有名的装修公司seo对各类网站的作用
  • 网络绿化网站建设哪家权威烟台seo外包
  • 做美女网站网站建设是干什么的
  • 人工智能自动做网站seo网络优化师
  • 南高齿网站是谁做的服务营销的七个要素
  • ps做分享类网站效果图网站技术制作
  • 网站图标按钮用什么做营业推广方式
  • 在手机上怎么做网页成都网站优化
  • 廊坊高端模板建站360优化大师官方版
  • 创办网站需要多少钱seo经典案例
  • 网站建设有哪些工作室seo专家是什么意思