1.Qt中用到Sleep函数
windows下:
#include <windows.h>
Sleep(DWORD dwMilliseconds) //毫秒 S大写
Linux下:
#include <unistd.h>
sleep(unsigned int seconds) //秒 s小写
如果想要将主线程等待100ms,总不能使用sleep吧,那样会导致GUI界面停止响应的,但是用事件循环就可以避免这一点:
QEventLoop loop;
QTimer::singleShot(100, &loop, SLOT(quit()));
loop.exec();
2.查看Qt数据库驱动
#include<QSqlDriver>
#include<QSqlDatabase>
#include<QDebug>
qDebug()<<"Available drivers:";
QStringList drivers=QSqlDatabase::drivers();
foreach(QString driver,drivers)
qDebug()<<driver;
3.QTCreator打开总是未响应
删除~\AppData\Roaming\QtProject文件夹,然后再打开Qt Creator即可。
Linux下,~是/home/YourUserName
Windows下,~是C:\Users\YourUserName
4.获取布局中的控件相对窗口的坐标
qDebug()<<ui->pushButton->mapToGlobal(QPoint(0,0)).x();
qDebug()<<ui->pushButton->mapToGlobal(QPoint(0,0)).y();
5. Qt事务操作
事务是数据库的一个重要功能,所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。在Qt中用transaction()开始一个事务操作,用commit()函数或rollback()函数进行结束。commit()表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据库的更新写回到数据库,事务正常结束。rollback()表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有已完成的操作全部撤销,回滚到事务开始时的状态。
如下面的例子:
void Widget::on_pushButton_clicked()
{
if(QSqlDatabase::database().driver()->hasFeature(QSqlDriver::Transactions))
{ //先判断该数据库是否支持事务操作
if(QSqlDatabase::database().transaction()) //启动事务操作
{
//下面执行各种数据库操作
QSqlQuery query; //事务必须由同一个query执行SQL语句
query.exec("insert into student values (14, 'hello')");
query.exec("delete from student where id = 1");
if(!QSqlDatabase::database().commit())
{
qDebug() << QSqlDatabase::database().lastError(); //提交
if(!QSqlDatabase::database().rollback())
qDebug() << QSqlDatabase::database().lastError(); //回滚
}
}
}
}
6.qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
Qt的这个目录下:D:\Qt\Qt5.4.2\Tools\mingw491_32\opt\bin。自带libeay32.dll和ssleay32.dll.
只需要把这个目录下的两个dll拷贝到D:\Qt\Qt5.4.2\5.4\mingw491_32\bin,就不会提示qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method。
7.Unicode与GBK互相转换
QByteArray UserConfig::Unicode2GBK(QString inStr)
{
QTextCodec* gbk = QTextCodec::codecForName("gbk");
return gbk->fromUnicode(inStr);
}
QString UserConfig::GBK2Unicode(QByteArray inStr)
{
QTextCodec* gbk = QTextCodec::codecForName("gbk");
return gbk->toUnicode(inStr);
}