试图从QDialog写入串行端口

Trying to write into a serial port from a QDialog.

本文关键字:串行端口 QDialog      更新时间:2023-10-16

我正在研究一个图形界面,它通过串行端口将8051与计算机连接起来。我可以在主窗口上完美地写端口:

void MainWindow::EnviarComando(QString comando)
{
    QByteArray send = (comando + "rn").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对象,但仍然能够从这些对话框发送命令。这可能吗?我尝试通过朋友函数,外部变量等,但由于主窗口对象调用QDialog,无论如何,它超出了范围。还有其他选择吗?

如果您这样实例化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的construct函数,并在参数中传递串口对象。