QT常用类续

本文详细介绍了QT框架中的关键类和技术,包括QDomDocument处理XML、QTcpSocket网络通信、QThread线程管理、QTimer计时器使用、QSerialPort串口访问及QTableWidget表格展示等内容,帮助读者深入理解QT的内部机制。

3.QDomDocument
QDomDocument类可以将XML文件保存为树的形式,操作简单,便于访问
QDomDocument类代表整个的XML文件。概念上讲:它是文档树的根节点,并提供了文档数据的基本访问方法。由于元素、文本节点、注释、指令执行等等不可能脱离一个文档的上下文,所以文档类也包含了需要用来创建这些对象的工厂方法。被创建的节点对象有一个ownerDocument()函数,它将对象与对象常见的文档上下文环境关联起来。DOM类中最常使用的是QDomNode、QDomDocument、QDomElement和QDomText。
解析后的XML文件在内部是通过一个对象树来表示的,对象树可以使用各种QDom类进行访问。所有的QDom类只引用内部树上的对象。一旦最后一个DOM树的QDom对象和QDocument本身被删除掉时,DOM树上的所有内部对象会被删除掉。元素、文本节点等的创建是通过使用类提供的各种工厂方法完成的。使用QDom类的缺省构造函数只会生成空的对象,这些空的对象不能操作,也不能写入到文档中。
QDomDocument::setContent()完成XML文档的设置,他从QFile对象中读取XML数据并检测XML文档的编码。setContent()有几种重载形式,可以分别从QByteArray、QString、QIODevice、QXmlInputSource中读取XML数据。
QTcpSocket类
QTcpSocket::QTcpSocket(QObject *parent = Q_NULLPTR)
功能:创建一个socket对象
void QAbstractSocket::abort()
功能:终止当前连接,并且重新设置套接字
bool QAbstractSocket::bind(const QHostAddress &address, quint16 port = 0, BindMode mode = DefaultForPlatform)
功能:将socket套接字绑定到指定的地址和端口号上
参数:address:主机地址,port:端口号
返回值:成功返回true,失败返回false
[virtual] void QAbstractSocket::connectToHost(const QString &hostName, quint16 port, OpenMode openMode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol)
功能:在给定的端口号上尝试着连接主机。
参数:
hostname:主机IP地址,用字符串表示,例如“192.168.0.0”
port:端口号
openMode:
QIODevice::NotOpen //不能打开
QIODevice::ReadOnly //只读
QIODevice::WriteOnly //只写
QIODevice::ReadWrite //读写
QIODevice::Append //追加,在打开文件的后面
QIODevice::Truncate //打开文件并且清空
QIODevice::Text //以文本方式打开
并且执行HostLookupState执行主机名字查找,查找主机成功之后发送hostFound信号,进入ConnectingState套接字连接状态,试图连接给定的地址或者查询返回的地址,建立连接之后,进入一个ConnectedState,连接已经被建立,并且发送connected信号
protocol:网络协议的类型,通常IPV4或者IPV6
返回值:无返回值
[virtual] void QAbstractSocket::disconnectFromHost()
功能:关闭socket套接字
如果该套接字有正在等待读写入的数据,则进入ClosingState状态,直到所有数据被写完。最后套接字进入没有连接的状态UnconnectedState,并且发射断开的信号disconnected();
SocketError QAbstractSocket::error() const
功能:返回上次发生错误的类型。
QHostAddress QAbstractSocket::localAddress() const
功能:返回本地套接字的主机地址
quint16 QAbstractSocket::localPort() const
功能:返回本地套接字的端口号
QHostAddress QAbstractSocket::peerAddress() const
功能:如果套接字处于连接状态,则返回套接字连接的对方主机地址
QString QAbstractSocket::peerName() const
功能:返回套接字连接的,对方的主机
[virtual] bool QAbstractSocket::setSocketDescriptor(qintptr socketDescriptor, SocketState socketState = ConnectedState, OpenMode openMode = ReadWrite)
功能:使用本机套接字描述符初始化QAbstrcatSocket
参数:
socketDescriptor:套接字描述符
socketState:套接字的状态
openMode:套接字的打开方式
[virtual] qint64 QAbstractSocket::bytesAvailable() const
功能:虚函数,继承QIODevice
返回等待读取的传入字节数
[virtual] qint64 QAbstractSocket::bytesToWrite() const
功能:虚函数,继承QIODevice
返回等待写入的字节数
[signal] void QAbstractSocket::connected()
功能:信号,当有套接字试图尝试连接主机,并且连接程功时,发送connected信号。发生在connectToHost之后。
[signal] void QAbstractSocket::disconnected()
功能:信号,当套接字断开时,发生在disconnectFromHost函数之后,发送disconnected信号
[signal] void QAbstractSocket::error(QAbstractSocket::SocketError socketError)
功能:当有错误发生时,就会发送error信号,socketError发生错误的类型。
[signal] void QAbstractSocket::stateChanged(QAbstractSocket::SocketState socketState)
功能:当socket套接字连接状态发生变化时,就会发送这个信号。socketState表示套接字的新的状态。
[signal] void QIODevice::aboutToClose()
功能:当设备即将关闭时发送该信号,在设备关闭前需要处理的,可以连接此信号。
[signal] void QIODevice::bytesWritten(qint64 bytes)
功能:每当有数据写入设备是就会发送这个信号,参数是写入设备的字节数。
[signal] void QIODevice::readyRead()
功能:每当有新的数据到来,设备即将读取时发送该信号
QTCPServer
父类:Object
提供了一个基于TCP的服务器。
这个类能够接受来自TCP的连接,你可以指定一个端口或者机器自动分配一个端口,你可以监听指定的端口和地址。调用listen()函数,监听传入的连接。每当有客户端连接到服务器的时候就会自动发送newConnection()信号,调用nextPendingConnection()函数,接受挂起的连接作为QTcpSocket,这个函数返回一个QTcpSocket对象的指针,通过这个对象可以实现与客户端的通信。
QTcpServer::QTcpServer(QObject *parent = Q_NULLPTR)
功能:构造函数,构造一个服务器对象。
void QTcpServer::close()
功能:关闭服务器,服务器不再监听连接。
[virtual] bool QTcpServer::hasPendingConnections() const
功能:如果服务器有挂起连接,则返回true,否则返回false。
bool QTcpServer::isListening() const
功能:如果服务器正在监听传入的的连接,则返回true,否则返回错误。
bool QTcpServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
功能:告诉服务器监听的地址和端口号,端口号是0,自动分配端口号。如果地址是QHostAddress::Any则服务器监听所有网络的接口。
[virtual] QTcpSocket *QTcpServer::nextPendingConnection()
功能:返回一个挂起的连接作为连接的QTcpSocket对象的指针。
注意:返回的QTcpSocket对象不能用于其他的线程,如果你想使用另一个线程来处理传入的连接,你需要重写incomingConnection()函数。
[virtual protected] void QTcpServer::incomingConnection(qintptr socketDescriptor)
功能:这个虚函数被调用,当一个有效的连接来临时会自动被调用。socketDescriptor作为连接的socket套接字的描述符被传入。
创建一个QTcpSocket类,设置socket的套接字描述符,保存到一个缓冲区列表中,最后发送newConnection()信号。incomingConnection会调用addPendingConnection()函数,将创建的QTcpSocket挂起的连接队列中。
[signal] void QTcpServer::newConnection()
功能:信号,当有新的连接时,这个信号就会被发送。
父类:Object
公有函数:
connect();连接信号与槽函数
QTimer类
父类:QObject
QTimer类提供了重复的单次计的一个类,为计时器提供了一个高的编程接口。创建一个QTimer类,调用start()函数,将定时器对象通过timeout()信号与槽函数连接起来,以恒定的时间间隔发送超时信号。
[slot] void QTimer::start(int msec)
功能:重载函数,启动或者重新启动定时器,超时间隔设置为msec;
[signal] void QTimer::timeout()
功能:信号,当定时器超时时发送该信号。
例子:
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);
update()槽函数每秒都要更新一次。
int QTimer::timerId() const
功能:如果定时器正在运行,则返回定时器的id
[slot] void QTimer::stop()
功能:关闭定时器的槽函数
void QObject::killTimer(int id)
功能:用定时器的标识符杀死一个定时器
int QObject::startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer)
功能:开始一个定时器,并且返回一个定时器的id
参数:interval:超时的间隔
timerType:定时器的类型
每隔interval 毫秒定时器事件就会发生一次。
返回值:定时器的Id
QThread类
QThread类提供了一种独立于平台的线程管理方法。一个QThread对象管理程序中的一个控制线程。线程由run()函数开始。默认情况下,run()函数通过调用exec()函数开启事件循环,在线程内部运行qt的线程机制。
[virtual protected] void QThread::run()
功能:线程的开启,在调用start()函数后,新线程会调用这个函数,默认情况下只是调用exec().也可以重写
[slot] void QThread::start(Priority priority = InheritPriority)
功能:线程的开始,调用该函数之后会自动的调用run()函数。
Q_OBJECT宏编译问题
在自定义的类中如果自定义了信号和槽函数,在使用connect连接时,自定义的类中必须包含Q_OBJECT宏,否则会提示无法找到对应的slots函数,在使用该宏时需要注意的是,只能出现在头文件中,如果.cpp源文件中出现该头文件就会报undefined reference to vtable for “xxx::xxx”的错误。所以在使用该宏事特别注意一定要使头文件和源文件的实现分开来写,如果都放到一个源文件中会发现报很多的编译错误。
线程开启使用的方法
线程的开启相对来说开销比较小,每个线程占有大约2M的内存,如果开启过多的线程,那么也是一笔不小的开销。下面我们主要讲述两种线程的开启方法:
1.子类化QThread类,重写run函数,现在线程中实现的部分就写在run函数中。一个线程的开启是从start()函数开始的。首先创建一个线程,调用start()函数,将会自动调用ruun函数。
2.子类化一个Object类。使用object类中的一个公有函数movetothread函数,将会对象的槽函数移动到线程中运行。
QByteArray类
QRunable类
QRunnable类是所有可运行对象的基类,是一个接口用于表示一个接口,重写写run()函数,用于实现要执行的任务和代码。可以使用QThreadPool在单独的线程中执行代码。
QSerialPort类(串口类)
提供访问串口的功能,可以使用QSerialPortInfo助手类获取关于可用串行端口的信息,这个串口信息类可以列出系统中串口的所有串行端口的所有信息。这对于你想要获取你要使用的串口信息十分有用的。你可以将串口信息类的对象作为参数传递给setPort()或setPortName(),来分配所需要的串行设备。
设置端口后,你可以通过open()函数,在只读只写或者读写模式下打开。
注意:串行端口总是以独占访问打开(也就是说,没有其他进程或线程可以访问已经打开的串行端口)。成功打开后,QSerialPort尝试确定端口的当前配置并初始化自己。您可以使用setBaudRate(),setDataBits(), setParity(), setStopBits(), and setFlowControl()将端口重新配置到所需的设置。一旦您知道端口已准备好读或写,您可以使用read()或write()函数。或者,也可以调用readLine()和readAll()方便的方法。如果不是一次性读取所有数据,剩余的数据将在稍后提供,因为新的传入数据被追加到QSerialPort的内部读取缓冲区中。您可以使用setReadBufferSize()限制读取缓冲区的大小。使用close()方法关闭端口并取消I/O操作。
如果waitForReadyRead()返回false,则连接被关闭或出现错误。带有阻塞串行端口的编程与非阻塞串行端口的编程截然不同。阻塞串行端口不需要事件循环,通常会导致更简单的代码。但是,在GUI应用程序中,阻塞串行端口只能在非GUI线程中使用,以避免冻结用户界面。有关这些方法的更多细节,请参考示例应用程序。QSerialPort类还可以使用QTextStream和QDataStream的流操作符(操作符<<()和操作符>>())。不过,有一个问题需要注意:在尝试使用操作符>>()重载操作符之前,确保有足够的数据可用。
QSerialPort::QSerialPort(QObject *parent = Q_NULLPTR)
功能:通过给的父对象 ,创建一个串口对象。
[virtual] bool QSerialPort::atEnd() const
功能:如果没有更多的数据可供阅读,则返回true;否则返回false。这个函数最常用于从一个循环中的串行端口读取数据。
[signal] void QSerialPort::baudRateChanged(qint32 baudRate, QSerialPort::Directions directions)
功能:波特率发生改变时,发送该信号。
[virtual] qint64 QSerialPort::bytesAvailable() const
功能:用于获得等待读取的传入字节数。
QTabWidget类
QTableWidget是QT程序中常用的显示数据表格的空间,很类似于VC、C#中的DataGrid。说到QTableWidget,就必须讲一下它跟QTabelView的区别了。QTableWidget是QTableView的子类,主要的区别是QTableView可以使用自定义的数据模型来显示内容(也就是先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来实现的(也就是不需要数据源,将逐个单元格内的信息填好即可)。这主要体现在QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。使用QTableWidget就离不开QTableWidgetItem。QTableWidgetItem用来表示表格中的一个单元格,正个表格都需要用逐个单元格构建起来。
QTableWidget类提供了一个基于项目的表视图,它具有一个默认模型。表小部件为应用程序提供标准的表显示设施。QTableWidget中的组件由QTableWidgetItem提供(可以理解为QTableWidget表示表的一个模板代表几行几列,需要带模板中添加组件,相当于实例化出具体的表,在每一行中添加组件QTableWidgetItem,代表表的列。)如果想要使用自己的数据模型的表,应该使用QTableView而不是这个类。
QTableWidget::QTableWidget(QWidget *parent = Q_NULLPTR)
功能:创建一个表对象
QTableWidget::QTableWidget(int rows, int columns, QWidget *parent = Q_NULLPTR)
[signal] void QTableWidget::cellChanged(int row, int column)
功能:当行和列指定的单元格的数据发生变化之后,就会发射该信号。
[signal] void QTableWidget::cellClicked(int row, int column)
功能:当单击行和列指定的单元格的时候,会发出该信号。
[signal] void QTableWidget::cellDoubleClicked(int row, int column)
功能:当双击行和列指定的单元格的时候会,发出该信号。
[signal] void QTableWidget::cellEntered(int row, int column)
功能:当鼠标光标进入到行和列指定的单元格的时候会发出该信号。
[signal] void QTableWidget::cellPressed(int row, int column)
功能:当按按下行和列指定的单元格的时候发出该信号。
QWidget *QTableWidget::cellWidget(int row, int column) const
功能:返回行和列指定的单元格的对象的指针。
[slot] void QTableWidget::clear()
功能:清除表中所有的单元格(即是QTableWidgetItem组件),包括清空表头。但是表的尺寸不会变。
[slot] void QTableWidget::clearContents()
功能:清除表中的单元格,但是不包括表头,表的尺寸不会变。
void QTableWidget::closePersistentEditor(QTableWidgetItem *item)
功能:关闭单元格的编辑功能。
int QTableWidget::column(const QTableWidgetItem *item) const
功能:返回单元格所在的列号。
int QTableWidget::columnCount() const
功能:返回表中所有的列数目。
int QTableWidget::currentColumn() const
功能:返回当前单元格的列号。
QTableWidgetItem *QTableWidget::currentItem() const
功能:返回当前单元格的对象指针。
int QTableWidget::currentRow() const
功能:返回当前单元格的行号。
void QTableWidget::editItem(QTableWidgetItem *item)
功能:将单元格设置为编辑模式。
void QTableWidget::insertColumn(int column)
功能:在表中插入一个空列。
[slot] void QTableWidget::insertRow(int row)
功能:在表中插入一个空行。
QTableWidgetItem *QTableWidget::item(int row, int column) const
功能:返回行号和列号指定的单元格的对象指针。
void QTableWidget::setItem(int row, int column, QTableWidgetItem *item)
功能:将单元格插入到表的行号和列号指定的位置。
void QTableWidget::setRowCount(int rows)
功能:设置表模型中的行数为rows行,如果表中总的行数对于要设置的行数,则大于的部分被丢弃不显示。
void QTableWidget::setHorizontalHeaderLabels(const QStringList &labels)
功能:使用labels设置表的表头。
[slot] void QTableWidget::removeRow(int row)
功能:移除第row行。
[slot] void QTableWidget::removeColumn(int column)
功能:移除第column列
void QTableWidget::removeCellWidget(int row, int column)
功能:删除行和列指定的单元格。
QTableWidgetItem类
QTableWidgetItem类为QTableWidget类提供一个条目。即是QTableWidget提供表的模型,QTableWidgetItem提供表单元格组件。
QTableWidgetItem类用于表示单元格,保存信息的。条目通常包含文本、图标和复选框。
QTableWidgetItem::QTableWidgetItem(const QString &text, int type = Type)
功能:构造一个文本项目对象
QTableWidgetItem::QTableWidgetItem(const QIcon &icon, const QString &text, int type = Type)
功能:构造一个图标项目对象
Qt::CheckState QTableWidgetItem::checkState() const
功能:返回单元格的状态。
[virtual] QTableWidgetItem *QTableWidgetItem::clone() const
功能:克隆一个项目。
void QTableWidgetItem::setCheckState(Qt::CheckState state)
功能:将表的单元格设置为state状态。
void QTableWidgetItem::setToolTip(const QString &toolTip)
功能:将项目工具的提示符设置为指定的提示符。
QString QTableWidgetItem::text() const
功能:返回表格中的字符串。
QTableView类
QTableView提供一个表视图默认样式。QTableView用于提供一个表视图用于显示模型中的项目。这个模型用于QTable类以前的表的标准模型。但是使用qt提供的模型或者视图可以更加便捷。QTableView类是模型/视图类中的一种,是Qt模型/视图框架的一部分。QTableView实现了QAbstractItemView类定义的接口,允许它显示来自QAbstractItemModel类的模型提供的数据。
该表具有可以使用verticalHeader()函数获得的垂直标题,以及通过horizontalHeader()函数获得的水平标题。可以使用rowHeight()查找表中每一行的高度,类似地,可以使用columnWidth()找到列的宽度,因为这两个都是普通的小部件,所以可以使用它们的hide()函数来隐藏它们中的任何一个。
可以使用hideRow()、hideColumn()、showRow()和showColumn()隐藏行和列。可以使用selectRow()和selectColumn()选择它们,该表将根据showGrid属性显示一个网格。表视图中显示的项,类似于其他项视图中的项,使用标准委托进行渲染和编辑。然而,对于某些任务来说,能够在表中插入小部件有时是有用的。使用setIndexWidget()函数为特定的索引设置小部件,然后使用indexWidget()检索。默认情况下,表中的单元格不会展开以填充可用空间,您可以通过拉伸最后一个标题部分使单元格填充可用空间。使用horizontalHeader()或verticalHeader()访问相关的头,并设置头的伸缩节属性。要根据每个列或行的空间需求分配可用空间,可以调用视图的resizeColumnsToContents()或resizeRowsToContents()函数
QTableView::QTableView(QWidget *parent = Q_NULLPTR)
功能:构建一个视图类对象。
void QTableView::clearSpans()
功能:删除表中所有的行和列。
QMenu类
继承自QWidget
Menu类提供了一个菜单小部件,可以在菜单栏、上下文菜单(右键菜单)和其他弹出菜单中使用。
[signal] void QMenu::aboutToHide()
功能:信号,此信号在菜单对用户隐藏之前发出。
[signal] void QMenu::aboutToShow()
功能:信号,此信号在菜单显示给用户之前发出。
QSqlDatabase类
QSqlDatabase类表示一个数据库的连接。
建立数据文件
QSqlDatabase db = QSqlDatabase::addDatabase(“QSQLITE”);
db.setDatabaseName(“database.db”);//
数据库连接池的主要操作:
(1)首先建立一个数据库连接池对象
(2)初始化一定数量的数据库连接,放入连接池对象的容器中
(3)当有数据库访问请求时,直接从连接池的容器中得到一个连接,这里出现三种情况:
(a)当容器中的还有连接时,则返回给数据库访问请求者一个连接
(b)当容器中没有连接时,并且当前建立的连接数没有达到系统定义的最大连接数,则创建一个新的数据库连接。
(c)当容器中的没有连接并且当前建立的连接数达到系统定义的最大连接数,则当前访问数据库请求就要等待其他访问请求释放连接。
(4)当数据库访问完成后,应该将连接放回连接池的容器中。
(5)当服务停止时,需要先释放数据库连接池中的所有数据库连接,然后再释放数据库连接池对象。
QT运行一个实例的创建方法有3中:
1.使用QLocalServer
线程的开启使用
线程基础篇:
线程开启的几种方法:
1.QThread类中,派生类中重写run()函数,将一些开销比较大的程序放到run函数中
线程的开启调用Start()函数,开启一个新的线程,在新线程中调用run函数,所以说QThread对象在旧的线程中,而run函数的实现在线的线程中。
2.使用MovetoThread
派生类QObject的派生类
使用方法:
QThread th;
QObject->MovetoThread(th);
其中,QObject对象在旧的线程中,只有QObject的槽函数的在新的线程中执行
3.使用线程池QThreadPool,使用全局的线程池,减少开线程的一个开销。一般来讲,QThreadPool和QRunable一起使用。
使用方法:派生一个QRunable的类
QThreadPool::globleinstance->(派生类QRunable的对象地址)。
其中,派生类QRunable的虚函数run()在新的线程中执行。
QLibrary
QLibrary加载运行时动态库的一个类。
QLibrary(const QString &fileName, QObject *parent = Q_NULLPTR)
功能:构造函数,构造已filename命名的一个动态库对象
bool QLibrary::load()
功能:加载动态库,如果加载成功则返回true,加载失败返回false。
因为在解析加载符号的时候都会自动的调用resolve()函数,因此不需要显示的调用,除非你想提前加载这个函数。
QFunctionPointer QLibrary::resolve(const char *symbol)
功能:加载函数的符号为symbol的函数,返回函数的指针。
QFunctionPointer 是一个typedef void (*)()
QWidget类
QWidget: 代表一般的窗口,实现在QtGui库中
构造:
QWidget(QWidget *parent = 0, Qt::WindowFlags f = 0); //parent指向父窗口,如果这个参数为0,则窗口就成为一个顶级窗口
//WindowFlags包括:
Qt::FrameWindowHint:没有边框的窗口
Qt::WindowStaysOnTopHint://总在最上面的窗口
Qt::CustomizeWindowHint://自定义窗口标题栏,以下标志必须与这个标志一起使用才有效,否则窗口将有默认的标题栏
Qt::WindowTitleHint:显示窗口标题栏
Qt::WindowSystemMenuHint://显示系统菜单
Qt::WindowMinimizeButtonHint://显示最小化按钮
Qt::WindowMaximizeButtonHint://显示最大化按钮
Qt::WindowMinMaxButtonsHint://显示最小化按钮和最大化按钮
Qt::WindowCloseButtonHint://显示关闭按钮
接口:
独立窗口:
窗口构造的时候如果有Qt::Window标志,那么它就是一个独立窗口,否则就是一个依附于其他独立窗口的窗口部件. 独立窗口一般有自己的外边框和标题栏,可以有移动,改变大小等操作. 顶级窗口一定是独立窗口,但独立窗口不一定是顶级的,它可以有父窗口,当父窗口被析构时它也会随之被析构.
bool isWindow() const;//判断是否为独立窗口
QWidget *window() const;//得到所在的独立窗口,当然,如果窗口本身就是独立窗口,那么得到的就是自己
QWidget *parentWidget() const;//得到窗口的父窗口
窗口标题:
QString windowTitle() const;//获得窗口标题
void setWindowTitle(const QString &text);//设置窗口标题
几何参数:
指的是窗口的大小和位置,一个窗口有两套几何参数,一套是窗口外边框所占的矩形区域,另一套是窗口客户区所占的矩形区域,所谓窗口客户区就是窗口中除去边框和标题栏用来显示内容的区域, 对于一个窗口部件来说,它的两套几何参数是一致的.
const QRect &geometry() const;//获取客户区几何参数
void setGeometry(int x, int y, int w, int h);//设置客户区几何参数
void setGeometry(const QRect &rect);//设置客户区几何参数
QRect framGeometry() const;//获取外边框几何参数
QSize frameSize() const;//获得外边框的窗口大小
void move(int x, int y);//将窗口左上角移动到期坐标(x,y)处 (外边框几何参数)
void move(const QPoint &pos0;//将窗口左上角移动到pos处 (外边框几何参数)
void resize(int w, int h);//将窗口的宽度改为w,高度改为h (客户区几何参数)
void resize(const QSize &size);//将窗口的大小改为size (客户区几何参数)
QRect rect() const;//获取窗口客户区域,它获得的坐标都是相对于窗口自己的客户区的,也就是说横纵坐标永远是0
可见性与隐藏: 可见指是否显示在屏幕上的属性,被其他窗口暂时遮挡的窗口也属于可见的
bool isVisible() const;//多年窗口是否可见
bool isHidden() const;//判断窗口是否隐藏
virtual void setVisible(bool visible);//设置窗口是否隐藏
void setHidden(bool hidden);//等价于setVisible(hidden)

void show();//显示窗口,等价于setVisible(true);
void hide();//隐藏窗口,等价于setHidden(true);
窗口状态:
bool isMinimized() const;//判断窗口是否为最小化
bool isMaximized() const;//判断窗口是否为最大化
bool isFullScreen() const;//判断窗口是否全屏
void showMinimized();//以最小化方式显示窗口,这是一个槽
void showMaximized();//以最大化方式显示窗口,这是一个槽
void showFullScreen();//以全屏方式显示窗口,这是一个槽
void showNormal();//以正常方式显示窗口,这是一个槽
Qt::WindowStates windowState() const;//获取窗口状态
void setWindowState(Qt::WindowStates windowState);//设置窗口状态
这里的Qt::WindowStates有以下几个取值: 这些取值可以用”按位或”的方法组合起来使用
Qt::WindowNoState:无标志,正常状态
Qt::WinowMinimized:最小化状态
Qt::WindowMaximized:最大化状态
Qt::WindowFullScreen://全屏状态
Qt::WindowActive:激活状态
使能: 处于使能状态的窗口才能处理键盘和鼠标等输入事件,反之,处于禁用状态的窗口不能处理这些事件,是否处于使能状态由属性enabled表示
bool isEnabled() const;//获得窗口的使能状态
void setEnabled(bool enable);//设置窗口的使能状态,这是一个槽
void setDisabled(bool disable);//等价于setEnabled(!disable),这是一个槽
激活状态: 当有多个独立窗口同时存在时,只有一个处于激活状态
bool isActiveWindow() const;//判断窗口所在的独立窗口是否激活
void activateWindow()//设置窗口所在的独立窗口为激活状态
焦点: 用来控制同一个独立窗口内哪一个部件可以接受键盘事件,同一时刻只能有一个部件获得焦点
bool hasFocus() const;//判断窗口是否获得焦点
void setFocus();//使窗口获得焦点,这是一个槽
void clearFocus(0;//使窗口失去焦点
QWidget *focusWidget() const;//得到窗口内获得焦点的子窗口
事件:
virtual void closeEvent(QCloseEvent *event);//关闭事件
virtual void showEvent(QShowEvent *event);显示
virtual void hideEvent(QHideEvent *event);//隐藏
virtual void moveEvent(QMoveEvent *event);//移动
virtual void resizeEvent(QResizeEvent *event);//改变大小
virtual void keyPressEvent(QKeyEvent *event);//键盘键按下
virtual void keyReleaseEvent(QKeyEvent *event);键盘键松开
virtual void mousePressEvent(QMouseEvent *event);//鼠标键按下
virtual void mouseReleaseEvent(QMouseEvent *event);//鼠标键松开
virtual void mouseDoubleClickEvent(QMouseEvent *event);//鼠标键双击
virtual void mouseMoveEvent(QMouseEvent *event);//鼠标移动
virtual void enterEvent(QEvent *event);//鼠标进入窗口
virtual void leaveEvent(QEvent *event);//鼠标离开窗口
virtual void wheelEvent(QWheelEvent *event);//鼠标滚轮移动
QLabel类
QLabel: 代表标签,是一个用于显示文本或图像的窗口部件
构造:
QLabel(QWidget *parent = 0, Qt::WindowFlags f = 0);
QLabel(const QString &text, QWidget *parent = 0, Qt::WindowFlags f = 0);//能够同时通过参数text给出要显示的文本,因此是最常用的构造方式
接口:
QString text() const;//获取显示的文本
void setText(const QString &text);//设置显示的文本,这是一个槽
const QPixmap *pixmap() const;//获取显示的图像
void setPixmap(const QPixmap &pixmap);//设置显示的图像,这是一个槽
void setNum(int num);//设置显示的文本为代表整数num的字符串,这是一个槽
void setNum(double num);//设置显示的文本为代表浮点数num的字符串
void clear;//清空显示内容
alignment代表显示内容的对齐方式:
Qt::Alignment alignment() const;//获取对齐方式
void setAlignment(Qt::Alignment align);//设置对齐方式
Qt::Alignment有以下取值: Qt::AlignLeft:水平方向靠左 Qt::AlignRight:水平方向靠右 Qt::AlignHCenter:水平方向居中 Qt::AlignJustify:水平方向调整间距两端对齐
Qt::AlignTop:垂直方向靠上 Qt::AlignBottom:垂直方向靠下 Qt::AlignVCenter:垂直方向居中 Qt::AlignCenter:等价于Qt::AlignHcenter | Qt::AlignVCenter,即水平和垂直方向都居中
indent代表文本的缩进值:
int indent() const://获取文本缩进值
void setIndent(int indent);//设置文本缩进值
margin代表显示内容的边距:
int margin() const;//获取边距
void setMargin(int margin);//设置边距
wordWrap代表显示的文本是否允许换行:
bool wordWrap() const;//判断是否允许换行
void setWordWrap(bool on);//设置是否允许行换行
scaledContents表示显示图像时是否允许缩放:
bool hasScaledContents() const;//判断是否允许图像缩放
void setScaledContents(bool on);//设置是否允许图像缩放,如果允许缩放,则显示图像时会进行缩放以填满整个显示区域
QAbstractButton类
QAbstractButton: 是QPushButton, QCheckBox,QRadioButton等类的基类,它可以代表按钮,单选钮,复选钮等重要窗口部件,通常不会直接使用这个类
bool isCheckable() const;//判断是否支持开关状态
void setCheckable(bool on);//设置是否支持开关状态
bool isChecked() const;//判断是否打开
void setChecked(bool on);//设置是否打开,这是一个槽
bool autoExclusive() const;//判断是否排他
void setAutoExclusive(bool on);//设置是否排他
bool isDown() const;//判断是否被按下
void setDown(bool on);//设置是否被按下,设置这个属性仅仅是改变按钮外观,不会发射任何信号
QIcon icon() const;//获得图标
void setIcon(const QIcon &icon);//设置图标
QString text() const;//获得文本
void setText(const QString &text);//设置文本
QKeySequence shortcut() const;//获得快捷键
void setShortcut(const QKeySequence &key);//设置快捷键. 设置快捷键所需的QKeySequence对象可用如下方式构造:QKeySequence(“Ctrl+p”);表示Ctrl+p组合键的QKeySequence对象
QPushButton类
QPushButton: 代表按钮,它继承了QAbstractButton,因此也有其全部的属性,信号和槽
构造:
QPushButton(QWidget *parent = 0);
QPushButton(const QString &text, QWidget *parent = 0);
QPushButton(const QIcon &icon, const QString &text, QWidget *parent = 0);//text是按钮上显示的文本,icon是按钮的图标,生成的对象默认是没有开关状态的
接口:
bool isFlat() const;//判断外观是否为扁平状
void setFlat(bool flat);//设置外观是否为扁平状, 如果为true,则按钮是扁平的,否则就是立体的
如果一个按钮在对话框中,那么它就有默认和自动默认的概念,分别由default属性以及autoDefault属性控制:
bool isDefault(0 const;//判断按钮是否为默认按钮
void setDefault(bool on);//设置按钮是否为默认按钮
bool autoDefault() const;//判断按钮是否为自动默认按钮
void setAutoDefault(bool)//设置按钮是否为自动默认按钮
对话框中同一时刻只能有一个默认按钮,当用户按回车键时,等价于在对话框中单击这个按钮.实际上,对话框中还有一个主默认按钮的概念. 一个自动默认按钮得到焦点时,就会变成默认按钮;失去焦点时,主默认按钮就成为默认按钮. 而设置一个按钮的默认属性为true将同时使它成为对话框的主默认按钮
QCheckBox类
QCheckBox:代表复选按钮,也是继承QAbstractButton类
构造:
QCheckBox(QWidget *parent = 0);
QCheckBox(const QString 7text, QWidget *parent = 0)//text表示要显示的文本,生成的复选按钮默认是不排他的
接口:
bool isTristate() const;//判断是否是三态的
void setTristate(bool y = true);//设置是否为三态的
三态的复选钮不只有打开和关闭两种状态,其状态由checkState属性来代表. Qt::CheckState是一个枚举类型,它的取值: Qt::Unchecked:未选中 Qt::PartiallyChecked:部分选中 Qt::Checked:选中
部分选中的状态经常用来表示一个选项树中某个选项的子选项有的选中,有的未选的状态.如果一个复选钮不是三态的,则也可以用从QAbstractButton继承来的checked属性操作它的状态.
Qt::CheckState checkState() const;//获得状态
void setCheckState(Qt::CheckState state);//设置状态
void stateChanged(int state);//当复选钮的状态发生变化时,将发射以下信号,其中state表示复选按钮的新状态
QRadioButton类
QRadioButton: 表示单选钮,也继承了QAbstractButton类
构造:
QRadioButton(const QString &text, QWidget *parent = 0);生成的单选钮默认是排他的
QLineEdit类
QLineEdit: 表示编辑框,它可以让用户输入一个单行文本
构造:
QLineEdit(QWidget *parent = 0);
QLineEdit(const QString &contents, QWidget *parent = 0);//contents表示编辑框的内容
接口:
Qt::Alignment alignment() const;//获取对齐方式
void setAlignment(Qt::Alignment flag);//设置对齐方式,Qt::Alignment与QLabel类的alignment属性相同
int maxLength() const;//判断是否为只读的
void setMaxLength(int len);//设置最大输入长度
bool isReadOnly() const;//判断是否为只读的
void setReadOnly(bool on);//设置是否为只读的
QString text() const;//获取编辑框的内容
void setText(const QString &text);//设置编辑框的内容,这是一个槽
QString displayText() const;//临到显示的内容,因为比如一个密码输入框,输入的密码不显示,得使用这个函数获得
bool hasFrame() const;//判断有没有边框
void setFrame(bool on);//设置有没有边框
void setTextMargins(int left, int top, int right, int bottom);//设置边距
void getTextMargins(int *left, int *top, int *right, int *bottom) const;//获取边距
这两个函数分别用于设置和获取文本显示的边距,上,下,左,右4个边距可以独立进行设置
信号:
void textChanged(const QString &text);//当编辑框内容发生变化时,会发射这个信号,text是变化后的内容
void textEdited(const QString &text);//当编辑框的内容被编辑时,会发射这个信号,它只在用户进行修改的时候发射,在程序中用seftText修改则不发射,而后者则在两种情况下都会发射
void returnPressed();//当在编辑框中按下回车键时,将发射这个信号,可以作为用户结束输入的一种条件
void editingFinished();//在按下回车键或者编辑框失去焦点时发射
槽:
void clear();//清空内容
跨线程的信号槽
线程的信号槽机制需要开启线程的事件循环机制,即调用QThread::exec()函数开启线程的事件循环。
Qt信号-槽连接函数原型如下:
bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection )
Qt支持5种连接方式
A、Qt::DirectConnection(直连方式)(信号与槽函数关系类似于函数调用,同步执行)
当信号发出后,相应的槽函数将立即被调用。emit语句后的代码将在所有槽函数执行完毕后被执行。
当信号发射时,槽函数将直接被调用。
无论槽函数所属对象在哪个线程,槽函数都在发射信号的线程内执行。
B、Qt::QueuedConnection(队列方式)(此时信号被塞到事件队列里,信号与槽函数关系类似于消息通信,异步执行)
当信号发出后,排队到信号队列中,需等到接收对象所属线程的事件循环取得控制权时才取得该信号,调用相应的槽函数。emit语句后的代码将在发出信号后立即被执行,无需等待槽函数执行完毕。
当控制权回到接收者所依附线程的事件循环时,槽函数被调用。
槽函数在接收者所依附线程执行。
C、Qt::AutoConnection(自动方式)
Qt的默认连接方式,如果信号的发出和接收信号的对象同属一个线程,那个工作方式与直连方式相同;否则工作方式与队列方式相同。
如果信号在接收者所依附的线程内发射,则等同于直接连接
如果发射信号的线程和接受者所依附的线程不同,则等同于队列连接
D、Qt::BlockingQueuedConnection(信号和槽必须在不同的线程中,否则就产生死锁)
槽函数的调用情形和Queued Connection相同,不同的是当前的线程会阻塞住,直到槽函数返回。
E、Qt::UniqueConnection
与默认工作方式相同,只是不能重复连接相同的信号和槽,因为如果重复连接就会导致一个信号发出,对应槽函数就会执行多次。
QThread是用来管理线程的,QThread对象所依附的线程和所管理的线程并不是同一个概念。QThread所依附的线程,就是创建QThread对象的线程,QThread 所管理的线程,就是run启动的线程,也就是新建线程。QThread对象依附在主线程中,QThread对象的slot函数会在主线程中执行,而不是次线程。除非QThread对象依附到次线程中(通过movetoThread)。
工程实践中,为了避免冻结主线程的事件循环(即避免因此而冻结了应用的UI),所有的计算工作是在一个单独的工作线程中完成的,工作线程结束时发射一个信号,通过信号的参数将工作线程的状态发送到GUI线程的槽函数中更新GUI组件状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值