Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Eugene1911 от Февраль 19, 2014, 11:32



Название: передача данных
Отправлено: Eugene1911 от Февраль 19, 2014, 11:32
Здравствуйте :)

Пытаюсь написать программу для передачи данных на устройство. Версия qt - 5.2.0, win 7, компилятор minGW. В designer'e создаю форму, по нажатию кнопки отправить передаю данные из lineEdit.
В mainwindow.cpp пишу:
Код:
void MainWindow::on_pushButton_3_clicked()
{
    QSerialPort serialPort;
    QString portName = (ui->comboBox->currentText());;
    serialPort.setPortName(portName);

    if (!serialPort.open(QIODevice::WriteOnly)) {
         ui->errorTextEdit->setText(tr("Can't open %1, error code %2")
                 .arg(portName).arg(serialPort.error()));
         return;
    }

    if (!serialPort.setBaudRate(QSerialPort::Baud9600)) {
        ui->errorTextEdit->setText(tr("Can't set baud rate 9600 baud to port %1, error code %2")
                   .arg(portName).arg(serialPort.error()));
        return;
    }

    if (!serialPort.setDataBits(QSerialPort::Data8)) {
       ui->errorTextEdit->setText(tr("Can't set 8 data bits to port %1, error code %2")
                   .arg(portName).arg(serialPort.error()));
        return;
    }

    if (!serialPort.setParity(QSerialPort::NoParity)) {
        ui->errorTextEdit->setText(tr("Can't set no parity to port %1, error code %2")
                   .arg(portName).arg(serialPort.error()));
        return;
    }

    if (!serialPort.setStopBits(QSerialPort::OneStop)) {
        ui->errorTextEdit->setText(tr("Can't set 1 stop bit to port %1, error code %2")
                   .arg(portName).arg(serialPort.error()));
        return;
    }

    if (!serialPort.setFlowControl(QSerialPort::UnknownFlowControl)) {
        ui->errorTextEdit->setText(tr("Can't set no flow control to port %1, error code %2")
                   .arg(portName).arg(serialPort.error()));
        return;
    }
    QByteArray dat;
    dat.clear();     
    dat.append(ui->lineEdit->text());
    serialPort.write(dat);
}

Программа собирается, запускается, но при нажатии кнопки "отправить" выдает ошибку:
void QSerialPortPrivate::detectDefaultSettings(): Unexpected flow control settings

В чем может быть ошибка, не подскажите?


Название: Re: передача данных
Отправлено: Bepec от Февраль 19, 2014, 11:33
Это не ошибка, это предупреждение. Это раз :D
Во вторых просто установите нужный вам flowControl и будет всё хорошо.


Название: Re: передача данных
Отправлено: Eugene1911 от Февраль 19, 2014, 11:36
Спасибо)) менять flowControl пробовал, при любых его значениях выдает это предупреждение)


Название: Re: передача данных
Отправлено: kuzulis от Февраль 19, 2014, 16:00
Цитировать
В designer'e создаю форму, по нажатию кнопки отправить передаю данные из lineEdit.

Код не верный. Нельзя вот так создавать QSerialPort в стеке и делать write(), т.к. после выхода из n_pushButton_3_clicked() объект будет разрушен и ничего не будет передано. Если оно сейчас работает (а оно работает на виндовс) - то это благодаря багу в QSerialPort, т.к. в идеале оно вообще не должно ничего передать при вызове write().

Цитировать
void QSerialPortPrivate::detectDefaultSettings(): Unexpected flow control settings

Это предупреждение уже удалили и в 5.2.2 его не должно быть. Но это не значит что все правильно.

Цитировать
Спасибо)) менять flowControl пробовал, при любых его значениях выдает это предупреждение)

Неужели? А если установить setRestoreSettingsOnClose() в false и проверить снова... ?


Название: Re: передача данных
Отправлено: Eugene1911 от Февраль 20, 2014, 11:53
Цитировать
Код не верный. Нельзя вот так создавать QSerialPort в стеке и делать write(), т.к. после выхода из n_pushButton_3_clicked() объект будет разрушен и ничего не будет передано.

Ясно. А как правильно? Как показано в справке - добавлять в проект еще 2 файла(заголовочный и исходный), разбираться дальше с QMutex и т.д.? Или все проще?


Название: Re: передача данных
Отправлено: OKTA от Февраль 20, 2014, 12:08
 ??? Иногда я читаю и хочу застрелиться от прочитанного  :'(


Название: Re: передача данных
Отправлено: Eugene1911 от Февраль 20, 2014, 14:42
Я про примеры, которые даны в справке по qt


Название: Re: передача данных
Отправлено: lesav от Февраль 20, 2014, 17:23
В Вашем случае сойдет и так
mainwindow.h
Код
C++ (Qt)
class MainWindow : public QMainWindow(){
.......
private:
  QSerialPort serialPort;
}

mainwindow.cpp
Код
C++ (Qt)
void MainWindow::MainWindow(){
     //configure serial port  and open
}
 
void MainWindow::on_pushButton_3_clicked()
{
   QByteArray dat;
   dat.clear();      
   dat.append(ui->lineEdit->text());
   serialPort.write(dat);
}