Qt 应用程序中使用 close系统调用函数 注意问题

Qt 应用程序中使用 close系统调用函数 注意问题

因qt QWidget有QWidget::close()函数,与系统调用函数close同名,这是qt设计不好的地方,因此在QWidget派生类函数中调用close系统调用就要使用全局域符号“::”。

当时我出问题的代码如下:

 

void ButtonWindow::mousePressEvent ( QMouseEvent * e )//鼠标单击事件响应
{
 int i;
 int bfd;
 int rt;

 std::cout << "mouse clicked!\n";

 bfd = open("/dev/Buzzer", 0);

 if (bfd!=-1)
  printf("open '/dev/Buzzer success!'\n");
 else
 {
  printf("open '/dev/Buzzer fail!'\n");
  printf(strerror(errno));
  return;
 }

 rt = close(bfd); //注意此处使用错误,未加全局域符号,默认调用ButtonWindow::close函数,应改为rt=::close(bfd)
 printf("close:rt=%d\n", rt);
 
 printf("close '/dev/Buzzer'!\n");
}

 

当时发现很奇怪,close函数总是返回1,与标准close函数返回值不符,且调用此句函数后,qt线程变为了僵尸线程。后来猛然发现qt QWidget有QWidget::close()函数,这也就能解释为什么qt界面没有了,并成为僵尸线程了。这个问题我找了一天多,最后总算找到了。在此做下记录,希望也能给遇到同样问题的朋友提供参考吧。

QT调用saveData函数,需要先在代码定义该函数,并根据需要传入相应的参数。 以下是一个示例代码,演示了如何定义一个保存数据的函数saveData,并在点击按钮时调用该函数: ``` void MainWindow::saveData(bool checkBoxState, int radioButtonId, QString lineEditContent) { // 将获取到的数据保存到文件 QFile file("data.txt"); if (file.open(QIODevice::WriteOnly | QIODevice::Text)) { QTextStream out(&file); out << "checkBoxState: " << checkBoxState << endl; out << "radioButtonId: " << radioButtonId << endl; out << "lineEditContent: " << lineEditContent << endl; file.close(); } } ``` 在保存数据函数,我们将获取到的数据保存到一个名为"data.txt"的文件。该文件以文本方式打开,使用QTextStream类进行写入操作。 在点击按钮时,我们可以调用saveData函数,并将获取到的数据作为参数传入: ``` void MainWindow::on_saveButton_clicked() { // 获取QCheckBox选状态 bool checkBoxState = ui->checkBox->isChecked(); // 获取QRadioButton被选的编号 int radioButtonId = -1; if (ui->radioButton_1->isChecked()) { radioButtonId = 1; } else if (ui->radioButton_2->isChecked()) { radioButtonId = 2; } else if (ui->radioButton_3->isChecked()) { radioButtonId = 3; } // 获取QLineEdit输入内容 QString lineEditContent = ui->lineEdit->text(); // 调用保存函数,将获取到的变量作为参数传入 saveData(checkBoxState, radioButtonId, lineEditContent); // 关闭当前页面 this->close(); } ``` 在上述代码,我们先获取QCheckBox、QRadioButton和QLineEdit的状态和输入内容,然后调用saveData函数,并将获取到的变量作为参数传入。最后,我们关闭当前页面,使用户可以返回到上一个页面。 注:以上示例代码仅供参考,具体实现方式需要根据你的具体需求进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值