学习Qt5(11)

来源:互联网 发布:网络剧如何赚钱 编辑:程序博客网 时间:2024/05/29 08:39

1.Qt多线程

    1)主要使用QThread类进行线程的操作,基本函数有start,stop,wait,terminate,sleep等;

    2)利用锁来控制多线程访问临界资源,QMutex,QMutexLocker,QSemaphore,QWaitCondition,

    3)QMutexLocker在构造函数中接收QMutex对象为参数进行锁定,在析构中会自动解锁这个互斥量;

    4)QSemaphore信号量,可以同时保护多个资源,acquire()获得资源,release()释放资源;

    5)QWaitCondition唤醒条件,对等待的线程进行唤醒。

 

2.Qt数据库

    1)常用SQL语句:

    Select + 选择的限定 + from子句 + where子句 + group子句 + order子句;

    Insert into + 表/视图 + 外部数据库的路径和名称 + 插入的列表;

    Delete + from表 + where条件;

    Update + 表 + set + 更新字段=新的值;

    2)聚合函数:用于计算表中的数据,返回单个计算结果,包括avg(平均值),count(项数),max(最大值),min(最小值),sum(和),VAR(统计方差);

    3)Qt使用QtSql模块进行数据库的操作,示例代码:

    

QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE"); //建立数据库连接    db.setHostName("huamoxian11");          //设置数据库主机名    db.setDatabaseName("huamoxian.db");              //设置数据库名    db.setUserName("huamoxian");                //设置数据库用户名    db.setPassword("123456");                   //设置数据库密码    db.open();                             //打开连接     //创建数据库表    QSqlQuery query;    bool success=query.exec("create table student(id int primary key,name varchar,old int,grade int)");    if (success)    {        qDebug() << QObject::tr("succeed\n");    } else {        qDebug() << QObject::tr("failed\n");    }     //查询    query.exec("select * from student");    QSqlRecord rec = query.record();    qDebug() << QObject::tr("student:" ) << rec.count();     //插入记录    QTime t;    t.start();    query.prepare("insert into student values(?,?,?,?)");     long records = 100;    for (int i = 0; i < records; i++)    {        query.bindValue(0, i);        query.bindValue(1, "huamoxian");        query.bindValue(2, rand()%100);        query.bindValue(3, rand()%100);         success = query.exec();        if (!success)        {            QSqlError lastError = query.lastError();            qDebug() << lastError.driverText() << QString(QObject::tr("failed"));        }    }    qDebug() << QObject::tr("insert %1 number,time:%2 ms").arg(records).arg(t.elapsed());     //排序    t.restart();    success = query.exec("select * from student order by id desc");    if (success)    {        qDebug() << QObject::tr("order %1 number,time:%2 ms").arg(records).arg(t.elapsed());    } else {        qDebug() << QObject::tr("failed!");    }     //更新记录    t.restart();    for (int i = 0; i < records; i++)    {       query.clear();       query.prepare(QString("update student set name=?,old=?,"                             "grade=? where id=%1").arg(i));        query.bindValue(0,"huamoxian");       query.bindValue(1,rand()%100);       query.bindValue(2,rand()%100);        success = query.exec();       if(!success)       {           QSqlError lastError=query.lastError();           qDebug() << lastError.driverText() << QString(QObject::tr("failed"));       }    }    qDebug() << QObject::tr("update %1 number,time:%2 ms").arg(records).arg(t.elapsed());     //删除    t.restart();    query.exec("delete from automobil where id=15");    qDebug() << QObject::tr("delete one,time:%1 ms").arg(t.elapsed());     return 0;

    4)Qt模型/视图访问数据库类主要包括,QSqlQueryModel,QSqlTableModel,QSqlReletionalTableModel,它们不需要使用sql语句就可以对数据库进行操作,在界面上易于显示。

 

0 0