2011-11-13 50 views
0

我正在使用圖形界面,通過串口將8051與計算機相連。 我可以在端口上完美從主窗口通過寫:試圖從QDialog寫入串行端口。

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,反正它超出了範圍。還有其他的選擇嗎?

回答

0

如果instaniate的QDialog的,因爲這:

void MainWindow::on_menucommand_triggered() 
{ 
    MyDialog d(this); 
    if(d.exec()==QDialog::Accepted) 
    { 
     //do something.. 
    } 
} 

然後,MyDialog可以檢索其聲明QDialog :: parent()方法主窗口。像這樣:

void MyDialog::checkSomething() 
{ 
    MainWindow *mainWindow; 
    mainWindow=qobject_cast<MainWindow*>(parent()); 
    if(mainWindow) 
    { 
     // mainWindow->sendToSerialPort(bytes); 
    } 
} 

從我自己的角度來看,這可能會打破MainWindow類的包裝。也許你可以重載QDialog的構造函數,並在參數中傳遞串口對象。

+0

感謝您的回覆。由於這樣做需要重載函數來做到這一點(我不確定它是否能正常工作),所以我最終通過使用選項卡來改變界面的整體外觀。雖然,我可能會將其用於密碼訪問屏幕(它需要是Dialog)。再一次,謝謝你! – notsag2d