0

我正在开发一个图形界面,它通过串行端口将 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,因此它无论如何都超出了范围。还有其他选择吗?

4

1 回答 1

0

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

于 2011-11-13T14:44:54.743 回答