Qt网关配置系统之新建工程功能
1.前言
前段时间做毕业设计需要做一个工程管理的功能,该功能包含新建工程,打开工程,保存工程和工程另存为。本文将对工程管理中的新建工程做一个记录。希望此文章对各位有所帮助。
2.开发环境
开发工具:Qt Creator5.14.2;
操作系统:Windows10;
编译方式:Mingw编译。
目录
3.UI界面设计
双击mainwindow.ui文件,在菜单栏的文件下添加几个action选项,如下图所示。添加打开工程和新建工程,然后添加一个分隔符,接着添加保存和另存为选项。
4.新建工程
在mainwindow.h文件中声明槽函数,如下图所示:
用on_…_triggered()这样的方式来写槽函数后,就不再需要用connect来连接新建工程action的信号和点击执行的槽函数。函数名中间的省略号为该action的对象名称。这样写之后,当鼠标点击该action选项时,执行的就为对应的槽函数。
完成思路:
在void MainWindow::on_action_create_project_triggered()中实现时,先弹出问题框询问用户是否需要保存当前工程。因为新建工程确定后将会直接加载该工程到配置系统。如果选择保存选项就将当前工程进行保存,然后弹出新建工程对话框。如果选择不保存,直接弹出新建工程对话框。在该对话框中进行新工程的设置,设置完后点击确定。如果新工程创建成功将直接打开新建的工程,否则打开失败,关闭掉打开的工程文件。
询问是否保存对话框代码:
//弹出询问对话框,如果点击确定就保存当前工程,如果点击no就不保存当前工程
QMessageBox *msg=new QMessageBox(QMessageBox::Question,tr("请选择"),tr("是否保存当前工程?"),QMessageBox::Yes|QMessageBox::No);
msg->setWindowIcon(QIcon(QT_NO_ICONV));
msg->button(QMessageBox::Yes)->setText("保存");
msg->button(QMessageBox::No)->setText("不保存");
int ret=msg->exec();
if(ret==QMessageBox::Yes)
{
//保存当前工程
on_action_save_triggered();
}
如果选择要保存就直接调用on_action_save_triggered()槽函数。
创建guicreateproject.ui文件,进行新建工程对话框的ui设计,如下图:
这里创建工程我只实现了新建空工程,后面的从模板创建的方式没有去实现。工程名字通过lineedit输入,工程路径通过…按钮进行选择。
//创建新建工程对话框
GUICreateProject *x = new GUICreateProject();
x->exec();
//成功新建工程
if(x->config.is_config){
QString sx= x->config.project_name;
qDebug()<<sx;
//新建工程时项目版本号设置为0,每保存一次项目,此版本加1
//sysServiceManager_->sys_project_version=0;
//如果新建工程成功,点击确定后,打开该工程
//将当前工程文件路径修改为刚刚新建的工程文件路径
G_Project_path=x->config.project_path;
qDebug()<<"G_Project_path"<<G_Project_path;
//打开工程文件,工程采用json数据格式进行存储
QFile file_r(G_Project_path);
if( file_r.open( QIODevice::ReadOnly | QIODevice::Text) )
{
QString jsonfile=file_r.readAll();
file_r.close();
QJsonParseError jsonParseError;
QJsonDocument jsonDoc=QJsonDocument::fromJson(jsonfile.toUtf8(),&jsonParseError);
if(!(jsonParseError.error==QJsonParseError::NoError))
{
QMessageBox::about(NULL,"提示","项目配置文件错误");
return;
}
QJsonObject jsonObj=jsonDoc.object();
//将获取的json对象赋给sysservicemanager对象
SysServiceManager *sysServiceMana=new SysServiceManager();
sysServiceMana->read(jsonObj,*sysServiceMana);
*sysServiceManager_=*sysServiceMana;
delete sysServiceMana;
//设置co_channel_length,do_channel_length的值
sysServiceManager_->coService_.co_channel_length=sysServiceManager_->coService_.channel_max_len;
sysServiceManager_->doService_.do_channel_length=sysServiceManager_->doService_.channel_max_len;
qDebug()<<"打开工程成功"
<<sysServiceManager_->coService_.co_channel_length
<<sysServiceManager_->doService_.do_channel_length;
//窗口初始化
windows_init();
//设置窗口标题
setWindowTitle(G_Project_path);
}
else {
file_r.close();
qDebug() <<G_Project_path + " open error!" ;
}
}
5.完整代码
5.1新建工程按钮槽函数
// 新建工程
void MainWindow::on_action_create_project_triggered()
{
//弹出询问对话框,如果点击确定就保存当前工程,如果点击no就不保存当前工程
QMessageBox *msg=new QMessageBox(QMessageBox::Question,tr("请选择"),tr("是否保存当前工程?"),QMessageBox::Yes|QMessageBox::No);
msg->setWindowIcon(QIcon(QT_NO_ICONV));
msg->button(QMessageBox::Yes)->setText("保存");
msg-