QT开发经验汇总

QT开发经验汇总

1.QT读写文件操作:
QTextStream文件流的方式来读写文件,速度快很多,基本上会有30%的提升,文件越大性能区别越大。

 QFile file(":/test.txt");
if (file.open(QFile::ReadOnly)) {
    //QTextStream方法读取速度至少快百分之30
#if 0
    while(!file.atEnd()) {
        QString line = file.readLine();
       qDebug()<<line;
    }
#else
    QTextStream in(&file);
    while (!in.atEnd()) {
        QString line = in.readLine();
        qDebug()<<line;
    }
#endif
    file.close();
}

2.QT工程中PRO文件的配置:

#禁用qdebug打印输出
DEFINES     += QT_NO_DEBUG_OUTPUT
#自定义define变量 可以在整个项目中使用
#pro文件可以这样判断 contains(DEFINES, videovlc) {}
#代码文件可以这样判断 #ifdef videovlc
DEFINES     += videovlc1 videoffmpeg
#关闭编译警告提示,编译时没有一堆红色的告警输出
CONFIG      += warn_off
#指定编译生成的文件到temp目录 分门别类存储
MOC_DIR     = temp/moc
RCC_DIR     = temp/rcc
UI_DIR      = temp/ui
OBJECTS_DIR = temp/obj
#指定编译生成的可执行文件到bin目录
DESTDIR     = bin

3.QT中控件样式表(给一种样式)

// color:文本颜色 background-color:背景颜色
QLabel
{
	color:red
	background-color: rgb(92, 53, 102);
}
QLineEdit
{ 
	background-color: rgb(238, 238, 236);
	border: 3px solid #32435E;
	border-radius: 5px;
	color:green;
	font-size:10;
}
QToolButton
{
	background-color: rgb(46, 52, 54);
	border-radius:10px;
	color: rgb(245, 121, 0);
	font-size:30;
}
QToolButton:pressed
{
    color:red;
    background-color: rgb(245, 121, 0);
    border: 1px solid rgb(12 , 138 , 235);
    padding-left:5px;
    padding-top:5px;
}

QT中判断文件是否存在(不存在就创建并写内容,存在就读取内容)

QFileInfo  fileInfo("/data/config.txt");
    bool ret =false;
    if(fileInfo.isFile()) // 文件存在
    {
        ret = true;
    }
    QFile file("/data/config.txt");
    if(!file.open(QIODevice::ReadWrite|QIODevice::Text))
    {
        return;
    }
    QTextStream textin(&file);
    if(ret)
    {
        qDebug()<<"file  exste now read";
        while (!textin.atEnd())
        {
            qDebug()<<textin.readLine();
        }
    }
    else
    {
        qDebug()<<"file not exste now write";
        textin<<"small"<<endl; // 写内容
    }
    file.close();

QT中操作json文件(主要用于读取修改配置)

class ctlJsonFile
{
    public:
       void  readJsonFile();
};
void  ctlJsonFile:: readJsonFile()
{
        QFile loadFile("/data/config.json");
		if(!loadFile.open(QIODevice::ReadWrite))
   		{
        	qDebug() << "could't open projects json";
        	return ;
    	}
    	QByteArray allData = loadFile.readAll();
    	loadFile.close();
    	QJsonParseError json_error;
    	QJsonDocument jsonDoc(QJsonDocument::fromJson(allData, &json_error));
		if(json_error.error != QJsonParseError::NoError)
   		 {
       		 qDebug() << "json error!";
        	return ;
   		 }
    	 QJsonObject rootObj = jsonDoc.object();
   		 QStringList keys = rootObj.keys();
    	for(int i = 0; i < keys.size(); i++)
        {
          qDebug() << "key" << i << " is:" << keys.at(i);
        }
}

QT中操作sqlite

创建并打开数据库

	QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());
    QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE");
    database.setHostName("edison");
    database.setDatabaseName("userInfo.db");
    if(!database.isOpen())
    {
        qDebug()<<"open databaes;";
        database.open();
   }
   

创建表

// 创建名字为 user 的表,包含 account password ProduceTime(当前时间)
	QSqlQuery query;
	if(query.exec("create table user(account varchar primary key,password varchar,ProduceTime varchar)"))
    {
        qDebug()<<"create table successful";
    }
    else
    {
        QSqlError error = query.lastError();
        qDebug()<<error.driverText()<<"database have exitsed...";

    }

注册功能

    typedef struct USER_INFOMATION
	{
	    QString accunt;
    	QString password;
   	    QString currentTime;
	}USER_INFORMATION;
	
	const QString userAccount = ui->resigerAccountLine->text();
    const QString userPassword = ui->resigerPasswordLine->text();
    const QString makesurepasswd = ui->makesurePasswordLine->text();
    if(userAccount==""||userPassword==""||makesurepasswd=="")
    {
        m_msgBox->information(this,tr("提示"),tr("账号名或者密码不能为空!"));
        return;
    }

    if(userPassword!=makesurepasswd)
    {
       m_msgBox->information(this,tr("提示"),tr("密码不一致,请重新输入!"));
       return;
    }
    QSqlQuery query;
    QString cmd = tr("select *from user where account = '%1';").arg(userAccount);
    query.exec(cmd);
    if(query.next())
    {
        qDebug()<<"账号已存在";
        m_msgBox->information(this,tr("提示"),tr("账号已存在 0.0"));
        ui->resigerAccountLine->clear();
        ui->resigerPasswordLine->clear();
        ui->makesurePasswordLine->clear();
        return;
    }
    USER_INFORMATION tmpUser;
    tmpUser.accunt = userAccount;
    tmpUser.password = userPassword;
    QDateTime currentime = QDateTime::currentDateTime();
    tmpUser.currentTime = currentime.toString("yyyy-MM-dd hh:mm:ss");
    QSqlQuery query;
    query.prepare("insert into user values(:account,:password,:ProduceTime)");
    query.bindValue(":account", tmpUser.accunt);
    query.bindValue(":password", tmpUser.password);
    query.bindValue(":ProduceTime",tmpUser.currentTime);
    query.exec();
    ui->stackedWidget->setCurrentWidget(ui->loginPage);
    ui->accountLine->clear();
    ui->passwordLine->clear();

登入功能

	QString useraccount = ui->accountLine->text();
    QString userpassword = ui->passwordLine->text();
    if(useraccount==""||userpassword=="")
    {
        m_msgBox->information(this,tr("提示"),tr("账号名或者密码不能为空!"));
        return;
    }
    QSqlQuery query;
    QString cmd = QString("select account,password from user where account = '%1';").arg(useraccount);
    query.exec(cmd);
    while(query.next())
    {
        m_userName = query.value(0).toString();
        m_userPasswd = query.value(1).toString();
        m_currentTime = query.value(2).toString();
    }
    if(m_userPasswd == userpassword&&m_userName==useraccount)
    {
      ui->backbtn->setVisible(true);
      ui->stackedWidget->setCurrentWidget(ui->showDataPage);
      m_currentPage = MAIN_PAGE;
      ui->backbtn->setVisible(true);
      ui->stackedWidget->setCurrentWidget(ui->mainPage);

    }
    else
    {
      m_msgBox->information(this,tr("提示"),tr("账号或者密码错误!"));
      return;
    }

QT中计算字符串md5

QString md5Result(QString &data)
{
	QCryptographicHash md5(QCryptographicHash::Md5);
    //添加要计算的数据
    md5.addData(data.toUtf8());
    //获取md5结果
    QByteArray md5Array = md5.result();
    //最终转化为16进制字符串
    QString md5data = md5Array.toHex().data();
    return md5data;
}
或者
QString md5Result(QString &data)
{
	QByteArray md5ret = QCryptographicHash::hash(data.toLatin1(), QCryptographicHash::Md5);
    return QString(md5data);
}

产生13位时间戳

qDebug()<<"current time = "<<QString::number(QDateTime::currentMSecsSinceEpoch());
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值