试图从 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