Попытка записи в последовательный порт из QDialog. - PullRequest
0 голосов
/ 13 ноября 2011

Я работаю над графическим интерфейсом, который соединяет 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 Ответ

0 голосов
/ 13 ноября 2011

Если вы создаете QDialog следующим образом:

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

Затем MyDialog может получить MainWindow из своего метода QDialog :: parent (). Как это:

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

С моей точки зрения, это может нарушить упаковку класса MainWindow. Может быть, вы можете перегрузить функцию построения QDialog и передать объект последовательного порта в аргументе.

...