Qt图形和线程编程快速上手

来源:互联网 发布:vue v bind 数组 编辑:程序博客网 时间:2024/04/30 11:17

QtCreator UI和线程简易说明

一、创建UI文件:

1创建并初始化子窗口部件

2.把子窗口部件放到布局中

3.设置Tab键顺序

4.建立信号-槽之间的连接

5.实现对话框中的自定义槽

保存为gotocell.ui


Qt中的内建的对话框

QMessageBox

QColorDialog

QFileDialog

QErrorDialog

二、QT使用设计文件有三种方式:

直接使用

单一继承方式

多继承方式

ui文件加入到工程,然后建立gotocell.hgotocell.cpp

自己创建一个新类让其从QDialogUi::GoToCellDialog中继承出来:建立gotocelldialog.h文件,并由它实现一些功能:

#ifndefGOTOCELLDIALOG_H

#defineGOTOCELLDIALOG_H

#include

#include"ui_gotocelldialog.h"

class GoToCellDialog:publicQDialog,public Ui::GoToCellDialog

{

   Q_OBJECT

public:

   GoToCellDialog(QWidget *parent = 0);

private slots:

   ……

};

#endif //GOTOCELLDIALOG_H

在源文件中:

#include

#include"gotocelldialog.h"

GoToCellDialog::GoToCellDialog(QWidget *parent)

   :QDialog(parent)

{

   setupUi(this);//初始化窗体

   。。。。。。。具体功能的实现

 

}

mian

#include

#include

//#include"ui_gotocelldialog.h"

#include"gotocelldialog.h"

int main(int argc, char*argv[])

{

   QApplication app(argc,argv);

   GoToCellDialog *dialog = new GoToCellDialog;

   dialog->show();

   return app.exec();

}

 

三、信号和槽

一个槽就相当于一个函数,槽函数即可与信号关联,也可当普通函数直接调用

bool QObject::connect ( constQObject * sender, const char * signal, const char * method,Qt::ConnectionType type = Qt::AutoConnection ) const

 

例如:connect(ui.comboBox,SIGNAL(currentIndexChanged(int)),this,SLOT(do_combox_change()));

 

四、多线程:

QT中使用线程,只需要继承QThread类并实现其run()函数,

class myThread : publicQThread

{

Q_OBJECT

protected:

 voidrun();

};

void MyThread::run()

{……}

只需在run()函数中填写所需的功能代码,然后创建一个MyThread实例,并以QThread::start()函数启动这个实例即可。这样run()函数中功能代码就运行在一个独立的线程中了。

 

Run()函数实际是个死循环。

要编译此应用还需要在.pro中加入一行

CONFIG +=thread 它告诉qmake使用QT库中的线程版本。

使用QMutex类的lock函数用来锁住互斥量,unlock用来解锁

QT中的信号量是由QSemaphore类提供的,互斥量只能锁定一次而信号量可以获取多次,它可以用来保护一定数量的同种资源。acquire(n)用于获取n个资源,当没有足够的资源时调用者将被阻塞,直到有足够的可用资源,release(n)可释放n个资源,tryAcquire(n)在没有足够资源时立即返回。

0 0
原创粉丝点击