网格布局:
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()的是非模态对话框;