1.控件的触发:toggle()、triggered()、clicked()
区别:
都是按钮点击后发射的信号
- clicked():用于Button发射的信号
- triggered():用于QAction发射的信号, trigger是一次性的。 点击后,无法改变状态。 要么是打开,要么是关闭。原型:void triggered(bool checked = false);
- toggle():用于ChekBox,类似开关。 具有2个状态,打开/关闭。 使用这个信号,是在这2个状态之间切换。原型:void toggled(bool);
2. QT TCPServer停止监听后仍能接收数据问题
调用tcpserver的close函数后,已经连接的客户端仍能向服务端发送数据,源码为
tcpServer->close();//停止监听
解决:
加入代码
tcpSocket->deleteLater();
解决继续接收数据问题。
补充:
官方说明:
close() :
是关闭服务器。服务器将不再侦听传入连接。
deleteLater() :
计划删除此对象。
当控件返回到事件循环时,该对象将被删除。如果调用此函数时事件循环未运行(例如,在QCoreApplication::exec()之前对对象调用deleteLater()),则一旦事件循环启动,该对象将被删除。如果在主事件循环停止后调用deleteLater(),则不会删除该对象。由于Qt 4.8,如果deleteLater()是在一个没有运行事件循环的线程中的对象上调用的,那么当线程结束时,该对象将被销毁。
请注意,进入和离开新的事件循环(例如,通过打开模式对话框)将不会执行延迟删除;对于要删除的对象,控件必须返回调用deleteLater()的事件循环。
注意: 多次调用此函数是安全的;当传递第一个延迟删除事件时,该对象的任何挂起事件都将从事件队列中删除。
3.保存串口接收的数据为txt文本文件
界面情况-将串口传递到服务器中显示的数据另存为txt文本文件。
控件:QPlainTextEdit
按钮-对象名:export_txt
输出:txt文本文件
实现代码如下:
首先直接使用ui界面对按钮进行转到槽处理,然后对按钮槽函数进行实现。
void administratorMainWindow::on_export_txt_clicked(){
QString textFile = QFileDialog::getSaveFileName(this,tr("Save txt"), "",tr("text (*.txt)")); //选择路径
//将文本框数据取出并按行排列
QFile file(textFile);//文件命名
if (!file.open(QFile::WriteOnly | QFile::Text)) //检测文件是否打开
{
QMessageBox::information(this, "Error Message", "Please Select a Text File!");
return;
}
QTextStream out(&file); //分行写入文件
out << ui->plainTextEdit->toPlainText();
}
运行界面:
结果:
此处参考文章,点击查看
4.qt QTextEdit 设置只读,设置不可选中
ui->textEdit->setReadOnly(true);