网格布局:
void QGridLayout::addWidget(QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = 0)
6个参数表示控件名,行,列,占用行数,占用列数,对齐方式
线程类QThread
创建继承QThread的线程类要包含一个virtual run()函数(可重载),因为QThread都是从这个函数开始执行。
而线程启动则是通过void QThread::start()函数。线程启动后会发出started信号,然后就执行run.
QMutex类互斥量提供的是线程之间的访问顺序化,用在串行线程的。
QMutex的目的是保护一个对象、数据结构或者代码段,所以同一时间只有一个线程可以访问它。
void lock();用来锁一个互斥量,当拥有这个互斥量后,其他线程就不能再用,只能等待当这个互斥量被释放后,其他线程才可以获得这个锁。
void tryLock();试着锁一个互斥量,当获得锁后,返回true;如果其他线程已经锁住这个互斥量,则返回false。
void unlock();释放互斥锁,使得其他正在等待的线程就可以使用这个互斥量了。
QT串口
Qserialport
该类提供访问串口的功能。你可以使用QSerialPortInfo帮助类获取系统上可用的串口的信息,可以枚举系统上存在的所有串口。通过该类你可以获取串口的正确名称。你可以传递一个该类的对象作为setPort()或者setPortName()方法的参数指定想要访问的串口设备。
serial.close();serial.setPortName(currentPortName);
if (!serial.open(QIODevice::ReadWrite)) {
emit error(tr("Can't open %1, error code %2")
.arg(portName).arg(serial.error()));
return;
}
if (serial.waitForReadyRead(currentWaitTimeout)) {
//! [7] //! [8]
// read request(接收)
QByteArray requestData = serial.readAll();
while (serial.waitForReadyRead(10))
requestData += serial.readAll();
waitForReadyRead//当有可读数据的时候返回true,否侧超时返回false
// write response(发送)/* QByteArray responseData = currentRespone.toLocal8Bit();//
serial.write(responseData);
if (serial.waitForBytesWritten(waitTimeout)) {
QString request(requestData);
//! [12]
emit this->request(request);
//! [10] //! [11] //! [12]
} else {
emit timeout(tr("Wait write response timeout %1")
.arg(QTime::currentTime().toString()));
}*/
QT的信号可以直接使用emit在发送。
QT模态对话框:DIALOG类exec();, 或者setModal(true);然后show(),而不用前面两种方法直接show()的是非模态对话框;