2011-11-13 7 views
0

私は8051をシリアルポート経由でコンピュータに接続するグラフィカルインターフェイスに取り組んでいます。接続用のストリームを保持する変数m_portさ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(); 
} 

: 私はを通じてメインウィンドウから完全にポートに書き込むことができます。 QDialogオブジェクトをメニューからインスタンス化するが、これらのダイアログからコマンドを送信できるようにしたい。出来ますか? 私は友人の関数、外部変数などを試しましたが、MainWindowオブジェクトはQDialogを呼び出すので、スコープの外にあると思います。他の選択肢はありますか?

答えて

0

あなたはこのようQDialogをinstaniate場合:次に

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

、MyDialogはQDialog ::親()メソッドからメインウィンドウを取得することができます。このように:

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

これは、MainWindowクラスのパッケージングを破る可能性があります。 QDialogの構築機能をオーバーロードして、引数にシリアルポートオブジェクトを渡すことができるかもしれません。

+0

ご返信ありがとうございます。これを行うには関数をオーバーロードする必要があるので(正しく動作するかどうかはわかりません)、タブを使用してインターフェイスの全体的な外観を変更しました。しかし、私はパスワードアクセス画面(これはDialogでなければなりません)のためにこれを使うかもしれません。もう一度、ありがとう! – notsag2d

関連する問題