QT笔记
最近终于入了QT的坑,来记录一下最近遇到的一些问题。
安装的坑
安装时建议使用:
.\qt-unified-windows-x64-4.5.2-online.exe --mirror https://mirrors.cloud.tencent.com/qt/
更换为国内源,以提升速度。
如果没找到自己想要的版本,点击右边的Archive
QT的界面逻辑
QT和MFC、Duilib的整个封装相当完善:线程、网络、甚至硬件(蓝牙)都被封装进了QT,大有一种“write once,run everywhere”的意思。
消息机制大有不同,依靠的是信号和槽,写代码时,能不止局限于处理QT定义的信号,更多的时候可以自己去写信号进行处理。而且信号与槽在编码时可以传递参数,能很方便的把后台的处理结果返回给界面。
在刚开始用QT时还不是很习惯,这里需要记住一个要点:虽然QT看上去前后端界面、逻辑不分家,但是不要让后端的代码影响界面,在后端处理时,需要更新界面的时候,一定要用发送消息的方式、不要直接在后端处理数据的地方操作界面。
信号与槽的连接:
    connect(this, &lidarCalib::goBack, this, &lidarCalib::onBackwardClicked);// 普通方式
    connect(this, &lidarCalib::setPwrStepStart, this, 
        [this](int value) {ui.inputPwrStepStart->setText(QString::number(value));
    });// lamda表达式方式
部分信号有多个重载函数,此时可以通过QOverload来指定特定的重载函数:
“`c++
    connect(ui->spinBoxImageCount, QOverload<int>::of(&QSpinBox::valueChanged), this, [this](int val){});
“`
QTcpsocket有一个bug:在线程中,无法通过socket实例发送消息。需要通过信号槽,将消息发送回主线程进行处理。
	
	
	
			
			


