试图从 QDialog 写入串行端口。

Posted

技术标签:

【中文标题】试图从 QDialog 写入串行端口。【英文标题】:Trying to write into a serial port from a QDialog. 【发布时间】:2011-11-13 14:04:54 【问题描述】:

我正在开发一个图形界面,它通过串行端口将 8051 与计算机连接起来。 我可以通过以下方式从 MainWindow 完美地在端口上写入:

void MainWindow::EnviarComando(QString comando)

    QByteArray send = (comando + "\r\n").toAscii();
    m_port->write(send);

    ui->list_log_enviados->addItem(comando);
    ui->list_log_enviados->setCurrentRow(ui->list_log_enviados->count()-1);

    m_cant_bytes_enviados += send.size();

作为 m_port 保存连接流的变量。 我想从菜单中实例化 QDialog 对象,但仍然能够从这些对话框中发送命令。是否可以? 我通过朋友函数、外部变量等进行了尝试,但是由于 MainWindow 对象调用了 QDialog,因此它无论如何都超出了范围。还有其他选择吗?

【问题讨论】:

【参考方案1】:

如果您像这样实例化 QDialog:

void MainWindow::on_menucommand_triggered()

    MyDialog d(this);
    if(d.exec()==QDialog::Accepted)
    
        //do something..
    

然后,MyDialog 可以从其 QDialog::parent() 方法中检索 MainWindow。像这样:

void MyDialog::checkSomething()

    MainWindow *mainWindow;
    mainWindow=qobject_cast<MainWindow*>(parent());
    if(mainWindow)
    
        // mainWindow->sendToSerialPort(bytes);
    

在我看来,这可能会破坏 MainWindow 类的包装。可能你可以重载QDialog的构造函数,并在参数中传递串口对象。

【讨论】:

感谢您的回复。因为这样做需要重载函数才能这样做(而且我不确定它是否能正常工作),我最终通过使用选项卡来改变界面的整体外观。虽然,我可能会将它用于密码访问屏幕(它需要是对话框)。再次感谢您!

以上是关于试图从 QDialog 写入串行端口。的主要内容,如果未能解决你的问题,请参考以下文章

从串行端口写入和读取

如何通过usb端口通信从arduino将串行数据写入phpmyadmin

如何确定 linux 串行端口上剩余的写入/输出缓冲区空间量?

Raspberry Pi 卡住串行输出端口写入 Xbee

如何强制串行端口写入方法在发送数据之前等待线路清除?

时序问题:QT 写入串行端口,然后读取