Skip to content

Commit e8d832e

Browse files
committed
Merge branch 'write'
2 parents 98f39fd + 1a923bb commit e8d832e

26 files changed

+2561
-0
lines changed

tech/QtPropertyBrowser/pic/01.png

3.09 KB
Loading

tech/QtPropertyBrowser/readme.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# 简介
2+
用过Qt Creator的都会发现,Qt的ui designer有个很好看的属性设置控件,但此控件不在Qt的任何官方文档有提及,在github里有这个工具的地址:[QtPropertyBrowser on github](https://github.com/commontk/QtPropertyBrowser)
3+
这里还有这个控件的介绍
4+
[doc.qt.io 关于QtPropertyBrowser的介绍](http://doc.qt.io/archives/qq/qq18-propertybrowser.html)
5+
之前我也写过一篇blog介绍过[Qt属性表控件的使用 QtTreePropertyBrowser](http://blog.csdn.net/czyt1988/article/details/42423613)
6+
这篇文章使用QtPropertyBrowser还需要经过一些配置,还是有些麻烦的。
7+
直到有一天,我用everything搜了一下QtPropertyBrowser,发现:
8+
9+
![](https://github.com/czyt1988/czyBlog/raw/master/tech/QtPropertyBrowser/pic/01.png)
10+
11+
原来Qt安装时都自带了这个模块,只是不告诉大家而已(记得安装时勾选安装源码)
12+
13+
# 解锁QtPropertyBrowser
14+
15+
QtPropertyBrowser的源码已经在Qt的安装目录下了,因此,使用QtPropertyBrowser只需要引入qtpropertybrowser.pri即可,如:
16+
17+
```shell
18+
include(d:/Qt/Qt5.7.0/5.7/Src/qttools/src/shared/qtpropertybrowser/qtpropertybrowser.pri)
19+
```
20+
21+
这样写有点丑而且无法跨工程:
22+
Qt的安装路径可以使用`QT_INSTALL_PREFIX`进行定位,对于这个qmake变量返回qt的安装目录
23+
像博主Qt5.7返回的是:
24+
25+
> D:\Qt\Qt5.7.0\5.7\mingw53_32
26+
27+
博主ununtu下的Qt5.5返回的是:
28+
29+
> /home/ui/Qt5.5.0/5.5/gcc
30+
31+
好了,如果你安装Qt时选择了安装src的勾勾的话,那么你只需要在pro中加入如下这句话就可以使用QtPropertyBrowser啦
32+
33+
```shell
34+
include($$[QT_INSTALL_PREFIX]/../Src/qttools/src/shared/qtpropertybrowser/qtpropertybrowser.pri)
35+
```
36+
37+
38+

tech/QtThread/QtThread/QtThread.pro

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#-------------------------------------------------
2+
#
3+
# Project created by QtCreator 2017-03-08T14:14:16
4+
#
5+
#-------------------------------------------------
6+
7+
QT += core
8+
9+
QT -= gui
10+
11+
TARGET = QtThread
12+
CONFIG += console
13+
CONFIG -= app_bundle
14+
15+
TEMPLATE = app
16+
17+
18+
SOURCES += main.cpp

tech/QtThread/QtThread/main.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#include <QCoreApplication>
2+
3+
int main(int argc, char *argv[])
4+
{
5+
QCoreApplication a(argc, argv);
6+
7+
return a.exec();
8+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#-------------------------------------------------
2+
#
3+
# Project created by QtCreator 2017-03-08T14:17:28
4+
#
5+
#-------------------------------------------------
6+
7+
QT += core gui
8+
9+
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
10+
11+
TARGET = QtThreadTest
12+
TEMPLATE = app
13+
14+
15+
SOURCES += main.cpp\
16+
Widget.cpp \
17+
ThreadFromQThread.cpp \
18+
ThreadObject.cpp
19+
20+
HEADERS += Widget.h \
21+
ThreadFromQThread.h \
22+
ThreadObject.h
23+
24+
FORMS += Widget.ui

tech/QtThread/QtThreadTest/QtThreadTest.pro.user.N23344

Lines changed: 671 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#include "ThreadFromQThread.h"
2+
#include <QDebug>
3+
#include <QMutexLocker>
4+
ThreadFromQThread::ThreadFromQThread(QObject* par) : QThread(par)
5+
,m_runCount(20)
6+
{
7+
8+
}
9+
10+
ThreadFromQThread::~ThreadFromQThread()
11+
{
12+
qDebug() << "ThreadFromQThread::~ThreadFromQThread()";
13+
}
14+
15+
void ThreadFromQThread::setSomething()
16+
{
17+
msleep(500);
18+
QString str = QString("%1->%2,thread id:%3").arg(__FUNCTION__).arg(__FILE__).arg((unsigned int)QThread::currentThreadId());
19+
emit message(str);
20+
}
21+
22+
void ThreadFromQThread::getSomething()
23+
{
24+
msleep(500);
25+
emit message(QString("%1->%2,thread id:%3").arg(__FUNCTION__).arg(__FILE__).arg((unsigned int)QThread::currentThreadId()));
26+
}
27+
28+
void ThreadFromQThread::setRunCount(int count)
29+
{
30+
m_runCount = count;
31+
emit message(QString("%1->%2,thread id:%3").arg(__FUNCTION__).arg(__FILE__).arg((unsigned int)QThread::currentThreadId()));
32+
}
33+
34+
void ThreadFromQThread::run()
35+
{
36+
int count = 0;
37+
m_isCanRun = true;
38+
QString str = QString("%1->%2,thread id:%3").arg(__FILE__).arg(__FUNCTION__).arg((unsigned int)QThread::currentThreadId());
39+
emit message(str);
40+
while(1)
41+
{
42+
sleep(1);
43+
++count;
44+
emit progress(((float)count / m_runCount) * 100);
45+
emit message(QString("ThreadFromQThread::run times:%1").arg(count));
46+
doSomething();
47+
if(m_runCount == count)
48+
{
49+
break;
50+
}
51+
52+
{
53+
QMutexLocker locker(&m_lock);
54+
if(!m_isCanRun)
55+
{
56+
return;
57+
}
58+
}
59+
}
60+
}
61+
62+
void ThreadFromQThread::doSomething()
63+
{
64+
msleep(500);
65+
emit message(QString("%1->%2,thread id:%3").arg(__FUNCTION__).arg(__FILE__).arg((unsigned int)QThread::currentThreadId()));
66+
}
67+
68+
69+
void ThreadFromQThread::stopImmediately()
70+
{
71+
QMutexLocker locker(&m_lock);
72+
m_isCanRun = false;
73+
}
74+
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#ifndef THREADFROMQTHREAD_H
2+
#define THREADFROMQTHREAD_H
3+
#include <QThread>
4+
#include <QMutex>
5+
class ThreadFromQThread : public QThread
6+
{
7+
Q_OBJECT
8+
signals:
9+
void message(const QString& info);
10+
void progress(int present);
11+
public:
12+
ThreadFromQThread(QObject* par);
13+
~ThreadFromQThread();
14+
void setSomething();
15+
void getSomething();
16+
void setRunCount(int count);
17+
void run();
18+
void doSomething();
19+
public slots:
20+
void stopImmediately();
21+
private:
22+
QMutex m_lock;
23+
bool m_isCanRun;
24+
int m_runCount;
25+
};
26+
27+
#endif // THREADFROMQTHREAD_H
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#include "ThreadObject.h"
2+
#include <QThread>
3+
ThreadObject::ThreadObject(QObject *parent):QObject(parent)
4+
,m_runCount(10)
5+
{
6+
7+
}
8+
9+
ThreadObject::~ThreadObject()
10+
{
11+
emit message(QString("Destroy %1->%2,thread id:%3").arg(__FUNCTION__).arg(__FILE__).arg((int)QThread::currentThreadId()));
12+
}
13+
14+
void ThreadObject::setRunCount(int count)
15+
{
16+
m_runCount = count;
17+
emit message(QString("%1->%2,thread id:%3").arg(__FUNCTION__).arg(__FILE__).arg((int)QThread::currentThreadId()));
18+
}
19+
20+
void ThreadObject::runSomeBigWork()
21+
{
22+
int count = 0;
23+
QString str = QString("%1->%2,thread id:%3").arg(__FILE__).arg(__FUNCTION__).arg((int)QThread::currentThreadId());
24+
emit message(str);
25+
while(1)
26+
{
27+
sleep(1);
28+
emit progress(((float)count / m_runCount) * 100);
29+
emit message(QString("Object::run times:%1,m_runCount:%2").arg(count).arg(m_runCount));
30+
++count;
31+
if(m_runCount == count)
32+
{
33+
break;
34+
}
35+
}
36+
}
37+
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#ifndef THREADOBJECT_H
2+
#define THREADOBJECT_H
3+
4+
#include <QObject>
5+
6+
class ThreadObject : public QObject
7+
{
8+
Q_OBJECT
9+
public:
10+
ThreadObject(QObject* parent = NULL);
11+
~ThreadObject();
12+
void setRunCount(int count);
13+
signals:
14+
void message(const QString& info);
15+
void progress(int present);
16+
public slots:
17+
void runSomeBigWork();
18+
private:
19+
int m_runCount;
20+
};
21+
22+
#endif // THREADOBJECT_H

0 commit comments

Comments
 (0)