通过对我们实验室的项目中qt的使用,来介绍qt的相关知识。首先从界面里的控件开始讲起。
1.让vs显示代码的行号:
基于上面的问题,我们可以做这样的设置:点击菜单栏的"工具"-->"选项",弹出选项窗体-->标上选项窗体左下方的"显示所有设置"-->选择左方的"文本编辑器"-->选中"所有语言"-->把右方显示下"行号打上对勾",点击"确定"即可。
2.源文件,头文件的树形结构
view->solution explorer就可以显示
这是我写的工程页面,现在从上到下介绍控件,在后面的文章中,会继续更新槽函数等内容。
1.窗口的工具栏可以用QToolBar 加入,也可以用designer来做,我是在designer上设计的,通过下面的语句在代码中进行引用。
<span style="font-size:18px;">ui->setupUi(this);
ui->actionNew</span>
2.窗体部分,QDockWidget、QSplitter、布局控件QBoxLayout 等控件及其相应属性。左边是一个树形结构用来显示文件,右面一个主窗口显示和一个显示list的photos窗口,
在bottom位置放一个status窗口。
<span style="font-size:18px;"> ui->setupUi(this);
setWindowState(Qt::WindowMaximized);//这是初始窗口最大化
<span style="font-size:18px;"> /*******显示汉字********/
QTextCodec *codec = QTextCodec::codecForName("GB2312");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec); </span>
左右各有一个窗体,里面需要分成两个可拉伸的部分,这里使用Qsplitter,对于两个部分,我们使用函数setStretchFactor()来实现比例<span style="font-size:18px;">splitterM->setStretchFactor(splitterM->indexOf(topTabWidget),1);</span>
<span style="font-size:18px;">
</span>
我使用了QDockWidget来做一个子窗口,这个窗口很好用,可以嵌套在其他的widget中,也可以把其它控件放在里面。做子窗口的嵌套很好用,在网上查了很久也发现有人用这个控件,真是很奇怪。
QDockWidget继承自QWidget,所以setMinimumHieght、addWidget等属性都有
<span style="font-size:18px;">最后QMainWindow里面用addDockWidget(位置,控件名)。</span>
<span style="font-size:18px;">
</span>
<span style="font-size:18px;">我重写了QTreeView和QList.自定义的部分在后续介绍</span>
线程的使用 QThread
1.QThread 有自己的信号机制,而QThreadpool是没有的。
继承QThread 然后实现run()方法,就可以使用多线程
2.我使用多线程来加载图片,在线程里,使用opencv来读入内存,并用QImage来获得缩略图。
图片张数较多,数据量大,需要对同时开的线程总量做限制
可以使用信号量QSemphore,网上或者API 上都有很多,生产者、消费者的使用方法。
我只有一种性质的线程,使用
QSemphore(10);
QSemphore.acquire();//线程开始,消耗一个
QSemphore.release();//线程结束,释放一个
就可以控制了。