Qt中关闭串口是怎样重载close()函数

来源:互联网 发布:南昌军工软件 编辑:程序博客网 时间:2024/06/05 00:56

我在Qt上编写串口相关的代码是发现在调用close()函数时出现了错误,代码如下:

打开串口时没问题: 

struct termios options;
    QString s = QString(tr("/dev/%1").arg(com));
    serialDevice = open(s.toAscii().data(),O_RDWR | O_NONBLOCK | O_NDELAY);
    if (serialDevice < 0) {
        QMessageBox::warning(0,tr("warning"),tr("open port failed!"));
        return ;
    }

    tcgetattr(serialDevice, &options);

    cfsetispeed(&options, SERIAL_BAUDRATE);
    cfsetospeed(&options, SERIAL_BAUDRATE);
    options.c_cflag |= CS8;   //8 bit data bits
    options.c_cflag &= ~PARENB;   //Clear parity enable
    options.c_iflag &= ~INPCK;  //Enable parity checking
    options.c_cflag &= ~CSTOPB;   //1 bit stop bit

    options.c_cc[VMIN] =  1;
    options.c_cc[VTIME] =  0;
    options.c_lflag &= ~(ECHO|ICANON|ISIG|ECHOE|ECHOK|ECHONL);
    options.c_iflag &= ~(IXOFF | IXON | INLCR | ICRNL | IGNCR);
    options.c_oflag &= ~(ONLCR | OCRNL | ONOCR | ONLRET);

    tcsetattr(serialDevice, TCSANOW, &options);

    if(serialDevice >= 0)
    {
        serialRxTimer->start();
        QMessageBox::warning(0,tr("Warning"), tr("serial Port Open Successful!"));
    }
}

void MainWindow::on_openport_clicked()
{
    int nu;
    if (serialDevice < 0) {
        serialInitPort(SERIAL_PORT);
        ui->openport->setText(tr("closeport"));
    } else {
        close(serialDevice);//这一步出现了错误,我是想重载close函数实现关闭串口,
        serialRxTimer->stop();
        ui->openport->setText(tr("openport"));
    }
}

void MainWindow::on_clear_clicked()
{
    ui->textEdit->clear();
}

哪位牛人帮忙解决一下!