基于Qt的对话框录入界面.docx
- 文档编号:10467054
- 上传时间:2023-02-13
- 格式:DOCX
- 页数:19
- 大小:260.61KB
基于Qt的对话框录入界面.docx
《基于Qt的对话框录入界面.docx》由会员分享,可在线阅读,更多相关《基于Qt的对话框录入界面.docx(19页珍藏版)》请在冰豆网上搜索。
基于Qt的对话框录入界面
实验报告
课程名称软件案例分析
实验名称基于对话框的录入界面
班级
学号
姓名
成绩
指导教师
实验日期
1.实验目的
(1)了解Qt数据库访问技术(加载数据库驱动)。
(2)掌握QSqlDatabase类和QSqlQuery类的使用。
(3)了解熟悉QtCreator开发环境及相关控件的使用。
(4)了解信号和槽的关联及作用。
(5)掌握基于对话框的用户界面设计方法和数据操作方法。
(6)掌握主窗口和子窗口之间数据访问方法。
2.实验环境
QtCreator+MinGW4.9(32-bit),Windows7,4G内存,DELL笔记本一台。
3.实验要求
(1)实现对人事(或其他)基本信息的增加、编辑、删除、刷新和导出功能。
(2)参考运行界面如图所示。
(3)运行界面友好简洁。
主界面
“增加个人基本信息”对话框
“修改个人基本信息”对话框
4.实验步骤及代码
(1)启动QtCreator,创建基于部件框的QtWidgetsApplication类型的应用程序,命名为Widget。
(2)修改对话框标题为“人事基本信息管理”。
在主界面窗口中添加6个按钮控件,一个TableWidget控件,界面设计如图所示。
(3)在主界面设置6个PushButton控件,设置text文本为“刷新”,“导出”,“增加”,“编辑”,“删除”,“退出”,编辑TableWidget的条目,分别为“序号”,“姓名”,“性别”,“出生日期”,“电话”,“最后学位”,“毕业学校”,“毕业时间”,“备注”。
(4)向工程中添加Qt设计师界面类(模板为Widget)子对话框资源,命名为“Add”,向界面添加Label,LineEdit,DateEdit,ConboBox等控件若干,界面设计如图。
(5)在Widget.h添加如下代码:
//声明信号
signals:
voidsendStr(QString,QString,QString,QString,QString,QString,QString,QString,QString,int);
//声明槽
privateslots:
voidon_pushButton_clicked();
voidon_tableWidget_cellDoubleClicked(introw,intcolumn);
voidon_pushButton_4_clicked();
voidon_tableWidget_cellClicked(introw,intcolumn);
voidon_pushButton_3_clicked();
voidon_pushButton_5_clicked();
voidon_pushButton_2_clicked();
private:
Ui:
:
Widget*ui;
intr;
Add*add;//增加界面对象
QSqlDatabasedb;
public:
voidcreateConnection();//创建连接
voidinit();
voidsetCW();
voidTable2Excel(QTableWidget*table,QStringtitle);//导出函数
protected:
voidcontextMenuEvent(QContextMenuEvent*);//增加右击菜单
(6)创建连接连接数据库,其函数代码如下:
voidWidget:
:
createConnection()
{
db=QSqlDatabase:
:
addDatabase("QMYSQL");
db.setHostName("localhost");
db.setPort(3306);
db.setDatabaseName("qt");
db.setUserName("root");
db.setPassword("121819");
if(!
db.open())
{
QMessageBox:
:
warning(this,"警告","数据库连接失败!
!
!
");
exit(0);
return;
}
}
(7)初始化函数代码如下(主要为查询数据库代码):
voidWidget:
:
init()
{
QSqlQueryquery("select*fromrenshi");
while(query.next())
{
QStringListlist;
list< (1).toString()< (2).toString()<< query.value(3).toString()< query.value(6).toString()< intrownum=ui->tableWidget->rowCount(); ui->tableWidget->insertRow(rownum); ui->tableWidget->setItem(rownum,0,newQTableWidgetItem(list.at(0))); ui->tableWidget->setItem(rownum,1,newQTableWidgetItem(list.at (1))); ui->tableWidget->setItem(rownum,2,newQTableWidgetItem(list.at (2))); ui->tableWidget->setItem(rownum,3,newQTableWidgetItem(list.at(3))); ui->tableWidget->setItem(rownum,4,newQTableWidgetItem(list.at(4))); ui->tableWidget->setItem(rownum,5,newQTableWidgetItem(list.at(5))); ui->tableWidget->setItem(rownum,6,newQTableWidgetItem(list.at(6))); ui->tableWidget->setItem(rownum,7,newQTableWidgetItem(list.at(7))); ui->tableWidget->setItem(rownum,8,newQTableWidgetItem(list.at(8))); } } (8)在构造函数中添加如下代码: ui->setupUi(this); add=newAdd; connect(this,SIGNAL(sendStr(QString,QString,QString,QString,QString,QString,QString,QString,QString,int)), add,SLOT(recvStr(QString,QString,QString,QString,QString,QString,QString,QString,QString,int))); connect(add,SIGNAL(senMsg()),this,SLOT(on_pushButton_clicked())); setCW(); //去掉默认行号 QHeaderView*headerView=ui->tableWidget->verticalHeader(); headerView->setHidden(true); createConnection(); init(); r=-1; (9)导出函数,代码如下: voidWidget: : Table2Excel(QTableWidget*table,QStringtitle) { QStringfileName=QFileDialog: : getSaveFileName(table,"保存", QStandardPaths: : writableLocation(QStandardPaths: : DocumentsLocation), "Excel文件(*.xls*.xlsx)"); if(fileName! ="") { QAxObject*excel=newQAxObject; if(excel->setControl("Excel.Application"))//连接Excel控件 { excel->dynamicCall("SetVisible(boolVisible)","false");//不显示窗体 excel->setProperty("DisplayAlerts",false);//不显示任何警告信息。 如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示 QAxObject*workbooks=excel->querySubObject("WorkBooks");//获取工作簿集合 workbooks->dynamicCall("Add");//新建一个工作簿 QAxObject*workbook=excel->querySubObject("ActiveWorkBook");//获取当前工作簿 QAxObject*worksheet=workbook->querySubObject("Worksheets(int)",1); inti,j,colcount=table->columnCount(); QAxObject*cell,*col; //标题行 cell=worksheet->querySubObject("Cells(int,int)",1,1); cell->dynamicCall("SetValue(constQString&)",title); cell->querySubObject("Font")->setProperty("Size",18); //调整行高 worksheet->querySubObject("Range(constQString&)","1: 1")->setProperty("RowHeight",30); //合并标题行 QStringcellTitle; cellTitle.append("A1: "); cellTitle.append(QChar(colcount-1+'A')); cellTitle.append(QString: : number (1)); QAxObject*range=worksheet->querySubObject("Range(constQString&)",cellTitle); range->setProperty("WrapText",true); range->setProperty("MergeCells",true); range->setProperty("HorizontalAlignment",-4108);//xlCenter range->setProperty("VerticalAlignment",-4108);//xlCenter //列标题 for(i=0;i { QStringcolumnName; columnName.append(QChar(i+'A')); columnName.append(": "); columnName.append(QChar(i+'A')); col=worksheet->querySubObject("Columns(constQString&)",columnName); col->setProperty("ColumnWidth",table->columnWidth(i)/6); cell=worksheet->querySubObject("Cells(int,int)",2,i+1); columnName=table->horizontalHeaderItem(i)->text(); cell->dynamicCall("SetValue(constQString&)",columnName); cell->querySubObject("Font")->setProperty("Bold",true); cell->querySubObject("Interior")->setProperty("Color",QColor(191,191,191)); cell->setProperty("HorizontalAlignment",-4108);//xlCenter cell->setProperty("VerticalAlignment",-4108);//xlCenter } //数据区 for(i=0;i for(j=0;j { worksheet->querySubObject("Cells(int,int)",i+3,j+1)->dynamicCall("SetValue(constQString&)",table->item(i,j)? table->item(i,j)->text(): ""); } } //画框线 QStringlrange; lrange.append("A2: "); lrange.append(colcount-1+'A'); lrange.append(QString: : number(table->rowCount()+2)); range=worksheet->querySubObject("Range(constQString&)",lrange); range->querySubObject("Borders")->setProperty("LineStyle",QString: : number (1)); range->querySubObject("Borders")->setProperty("Color",QColor(0,0,0)); //调整数据区行高 QStringrowsName; rowsName.append("2: "); rowsName.append(QString: : number(table->rowCount()+2)); range=worksheet->querySubObject("Range(constQString&)",rowsName); range->setProperty("RowHeight",20); workbook->dynamicCall("SaveAs(constQString&)",QDir: : toNativeSeparators(fileName));//保存至fileName workbook->dynamicCall("Close()");//关闭工作簿 excel->dynamicCall("Quit()");//关闭excel deleteexcel; excel=NULL; if(QMessageBox: : question(NULL,"完成","文件已经导出,是否现在打开? ",QMessageBox: : Yes|QMessageBox: : No)==QMessageBox: : Yes) { QDesktopServices: : openUrl(QUrl("file: ///"+QDir: : toNativeSeparators(fileName))); } } else { QMessageBox: : warning(NULL,"错误","未能创建Excel对象,请安装MicrosoftExcel。 ",QMessageBox: : Apply); } } } (10)右键菜单函数,代码如下: voidWidget: : contextMenuEvent(QContextMenuEvent*) { QMenu*menu=newQMenu(this); QAction*action=newQAction(this); QAction*action1=newQAction(this); QAction*action2=newQAction(this); QAction*action3=newQAction(this); QAction*action4=newQAction(this); QAction*action5=newQAction(this); action->setText(tr("刷新")); action1->setText(tr("导出")); action2->setText(tr("增加")); action3->setText(tr("编辑")); action4->setText(tr("删除")); action5->setText(tr("退出")); connect(action,SIGNAL(triggered(bool)),this,SLOT(on_pushButton_clicked())); connect(action1,SIGNAL(triggered(bool)),this,SLOT(on_pushButton_2_clicked())); connect(action2,SIGNAL(triggered(bool)),this,SLOT(on_pushButton_3_clicked())); connect(action3,SIGNAL(triggered(bool)),this,SLOT(on_pushButton_4_clicked())); connect(action4,SIGNAL(triggered(bool)),this,SLOT(on_pushButton_5_clicked())); connect(action5,SIGNAL(triggered(bool)),this,SLOT(close())); menu->addAction(action); menu->addSeparator(); menu->addAction(action1); menu->addSeparator(); menu->addAction(action2); menu->addSeparator(); menu->addAction(action3); menu->addSeparator(); menu->addAction(action4); menu->addSeparator(); menu->addAction(action5); menu->addSeparator(); menu->exec(QCursor: : pos()); } (11)双击修改函数和6个PushButton添加信号对应的槽(类似消息响应函数),代码如下: voidWidget: : on_pushButton_clicked() { ui->tableWidget->setRowCount(0); ui->tableWidget->clearContents(); init(); } voidWidget: : on_tableWidget_cellDoubleClicked(introw,intcolumn) { emitsendStr(ui->tableWidget->item(row,0)->text(),ui->tableWidget->item(row,1)->text() ui->tableWidget->item(row,2)->text(),ui->tableWidget->item(row,3)->text() ui->tableWidget->item(row,4)->text(),ui->tableWidget->item(row,5)->text() ui->tableWidget->item(row,6)->text(),ui->tableWidget->item(row,7)->text() ui->tableWidget->item(row,8)->text(),2); add->setWindowTitle("修改个人基本信息"); add->show(); } voidWidget: : on_pushButton_4_clicked() { if(r==-1) { QMessageBox: : warning(this,"警告","请选择要修改的行! "); return; } on_tableWidget_cellDoubleClicked(r,0); } voidWidget: : on_tableWidget_cellClicked(introw,intcolumn) { r=row; } voidWidget: : on_pushButton_3_clicked() { add->show(); emitsendStr(QString: : number(ui->tableWidget->rowCount()+1),"","","","","","","","",1); add->setWindowTitle("增加个人基本信息"); } voidWidget: : on_pushButton_5_clicked() { if(r==-1) { QMessageBox: : warning(this,"警告","请选择要删除的行! "); return; } QMessageBoxmsgBox; msgBox.setText("您确定删除本条信息吗? "); msgBox.setToolTip("提示"); msgBox.setStandardButtons(QMessageBox: : Ok|QMessageBox: : Cancel); msgBox.setDefaultButton(QMessageBox: : Ok); intret=msgBox.exec(); switch(ret){ caseQMessageBox: : Ok: { QSqlQueryquery; QStringnum=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Qt 对话框 录入 界面