Qt Little Tips
来源:互联网 发布:西北师范知行教务管理 编辑:程序博客网 时间:2024/05/16 12:32
1、 Start
- 整理QT应用过程中的一些小知识点,以备后查。
2、 时间日期转成字串
一般用于界面显示,或者存SQLITE。
QString date = QDate::currentDate().toString(QString("yyyy-MM-dd")); QString time = QTime::currentTime().toString(QString("hh:mm:ss")); QString dateTime =QDateTime::currentDateTime().toString(QString("yyyy-MM-dd hh:mm:ss"));
3、检测文件
一般用于检测文件系统里生成的文件,USB热插拔等。
QFileSystemWatcher *watcher = new QFileSystemWatcher(this);watcher->addPath("/dev/");//要检测的目录(如U盘持载等)connect(watcher , SIGNAL(directoryChanged(QString)), this, SLOT(onDetectFileExist(QString)));//在槽函数中判断是否存在这个特定的文件
4、Qt输出重定向到文件
将qDebug()的输出重定向到文件里。一般用于产品发布后,客户端查问题。
QtMessageHandler qInstallMessageHandler(QtMessageHandler handler)void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg){ static QMutex mutex; mutex.lock(); QString message; switch (type) { case QtDebugMsg: message = "D:"; break; case QtWarningMsg: message = "W:"; break; case QtCriticalMsg: message = "C:"; break; case QtFatalMsg: message = "F:"; break; } message += msg; QFile file("./log.txt"); file.open(QIODevice::WriteOnly | QIODevice::Append); QTextStream stream(&file); stream << message << "\r\n"; file.flush(); file.close(); mutex.unlock();}
5、Find Children
查找子类,一般把所有的子类集合在一起做一些其它的操作,比如多语言。
QList<T> QObject::findChildren(const QString & name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const//Children has all instance of MyWidget in dialog.QList<MyWidget*> children = findChildren<MyWidget*>()//Children has one instance of MyWidget with objectName() == HiQList<MyWidget*> children = findChildren<MyWidget*>(“Hi”);
6、通过名字调用槽函数
QMetaObject::invokeMethod(objPtr, "function");QString retVal;QMetaObject::invokeMethod(obj, "compute", Qt::DirectConnection, Q_RETURN_ARG(QString, retVal), Q_ARG(QString, "sqrt"), Q_ARG(int, 42), Q_ARG(double, 9.7));
7、延迟初始化
一般在初始化的时候,放在构造函数初始化又太早了,其它模块还没有起来,这个时候可以延迟一下。
QTimer::singleShot(1000, this, SLOT(init()));
8、打印自定类
主要用于多处需要打印自定类的成员变量。
//声明QDebug operator<<(QDebug, const CoustomClass&);//定义QDebug operator<<(QDebug dbg, const CoustomClass&obj){ dbg.nospace()<< "name:" << obj.name() << "length:" << obj.length() << "height:" << obj.height() << "weith:" << obj.weith(); return dbg.space();}//使用CoustomClass a;qDebug()<<a;
9、线程锁
进入函数加锁,函数返回解锁,用于多线程里的共享资源访问。
QMutex m_mutex;void exclusiveFunction() { //Constructor locks QMutexLocker(&m_mutex); //do something …} //Destructor unlocks
10、浮点型比较
float 与double类型的数据 “==”运算是有精度问题的,一般要用如下方法:
bool qFuzzyCompare(double p1, double p2)bool qFuzzyCompare(float p1, float p2)
11、延时一小会儿
延时1秒,不会阻塞线程。
//your codeQTime t;t.start();while(t.elapsed()<1000) QCoreApplication::processEvents();//your code
12、保存数据
//value 一般使用QVariant
QSettings settings(filename, QSettings::IniFormat);//存settings.beginGroup("default");settings.setValue("size", QSize(x,y));settings.endGroup();//取settings.beginGroup("factory");int size = settings.value("size").toInt(); settings.endGroup();
在linux下进行完ini 文件的操作后最好要调用 一下系统命令 “sync”。当读写过程中断电会生成一个.lock文件,下次读写时,会读这个.lock文件,这个文件是一个空文件,而QSettings 的读写是阻塞的。
13、消息同步
当要求一个命令序列(信号)是顺序执行时,或者需要发送信号后收到结果再往下执行时,可以使用QEventLoop建立一个临时的消息循环,而不阻塞所以的线程的消息循环。
QEventLoop loop;manager = new QNetworkAccessManager(this);QNetworkRequest request;request.setUrl(QUrl("://file/db.db"));QNetworkReply *reply = manager->get(request);connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));loop.exec(); QByteArray data = reply->readAll();//直到网络请求返回后再执行下一行代码
阅读全文
0 0
- Qt Little Tips
- little tips
- abap little tips
- Little Tips for Hadoop
- Some Little Tips
- Qt Tips
- qt tips
- little tips 满堆栈递减
- Little Tips(持续更新)
- Map与Set的使用little tips
- KDE/Qt Tips 004
- Qt's tips
- Symbian&Qt Tips
- QT Tips (持续更新)
- Qt Creator 使用tips
- QT tips QChart chart demo
- Qt 5.4 + OpenCV 进行图像处理Tips
- Some Tips and Tricks about Qt
- 602. Friend Requests II: Who Has Most Friend?
- React-Native撸android原生百度定位SDK服务[跨平台模块自定义]
- 使用分区助手扩大系统盘容量
- Java+opencv3.2.0之灰度化
- CSM和PMI-ACP认证有什么区别
- Qt Little Tips
- oracle创建实例
- 分数加减法
- Jquery Table 的基本操作
- HYSBZ
- c++函数重载,重定义,重写,区别详解理解原理
- A Knight's Journey (深度搜索+字典序)
- 每日AC--leetcode--recordList
- HDU 5361 In Touch(并查集实现区间删除)