客户端封装
核心类
为什么设计为单例?
拒绝无缘无故产生对象,造成内存泄漏
只允许创建一个对象,因此节省内存,加快对象访问速度,因此对象需要被公用的场合适合使用,如多个模块使用同一个数据源连接对象等等
类似为:任务管理器只能有一个
单例:即只有一个对象。
构造函数私有化:1.拷贝构造、析构函数私有化。2.提供一个静态公有接口可以得到这个对象。
退出_回收窗口
dialog.h
//重写的虚函数; 关闭事件,需要调用析构,防止内存泄露
void closeEvent(QCloseEvent * event);
dialog.cpp
void Dialog::closeEvent(QCloseEvent *event){
//弹出询问:参数1:父控件是什么? 2:左上角标题,3:内容
if(QMessageBox::question(this,"退出提示","是否退出?")==QMessageBox::Yes){
//确认关闭
event->accept();//同意当前事件退出
Q_EMIT SIG_close();//发送信号
}else{
//否
event->ignore();
}
}
connect
是QT中的连接函数,将信号发送者sender对象中的信号signal与接受者receiver中的member槽函数联系起来。
即当前对象是:m_mainDialog ,信号:关闭信号SIG_close() ;槽函数:
connect(m_mainDialog,SIGNAL(SIG_close()),
this,SLOT(slot_destroyed()));
Ckernel.h
声明槽函数
private slots:
void slot_destroyed();
Ckernel.cpp
在核心类中写槽函数
void Ckernel:: slot_destroyed(){
delete m_mainDialog;
}
加载配置文件
CKernel.cpp
//配置文件 位置:exe同级目录:没有则自动创建
//文件名 .ini
//格式:
//[组名]:区分不同组
//key=value :键值对
/*
* [net]
* ip=192.168.3.1
* port=8008
*/
void Ckernel::loadInifile()
{
//默认值
m_ip = "192.168.5.198";
m_port = "8004";
//获取exe目录
QString path = QCoreApplication::applicationDirPath();
//根据目录,看文件是否存在
QFileInfo info(path);
QSettings setting(path ,QSettings::IniFormat);
if(info.exists()){
setting.beginGroup("net");
QVariant strIP = setting.value("ip","");
QVariant strPort = setting.value("port","");
if(!strIP.toString().isEmpty())
m_ip= strIP.toString();
if(!strPort.toString().isEmpty())
m_port =strPort.toString();
}else{
//不存在
//打开组:设置对应类容
setting.beginGroup("net");
setting.setValue("ip",m_ip);
setting.setValue("port",m_port);
}
//关闭组
setting.endGroup();
qDebug()<<"ip:"<<m_ip<< "port:"<<m_port;
}