Russian Qt Forum
Ноябрь 26, 2024, 16:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: передача данных  (Прочитано 4319 раз)
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

В чем может быть ошибка, не подскажите?
Записан
Bepec
Гость
« Ответ #1 : Февраль 19, 2014, 11:33 »

Это не ошибка, это предупреждение. Это раз Веселый
Во вторых просто установите нужный вам flowControl и будет всё хорошо.
Записан
Eugene1911
Гость
« Ответ #2 : Февраль 19, 2014, 11:36 »

Спасибо)) менять flowControl пробовал, при любых его значениях выдает это предупреждение)
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Февраль 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 и проверить снова... ?
Записан

ArchLinux x86_64 / Win10 64 bit
Eugene1911
Гость
« Ответ #4 : Февраль 20, 2014, 11:53 »

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

Ясно. А как правильно? Как показано в справке - добавлять в проект еще 2 файла(заголовочный и исходный), разбираться дальше с QMutex и т.д.? Или все проще?
Записан
OKTA
Гость
« Ответ #5 : Февраль 20, 2014, 12:08 »

 Непонимающий Иногда я читаю и хочу застрелиться от прочитанного  Плачущий
Записан
Eugene1911
Гость
« Ответ #6 : Февраль 20, 2014, 14:42 »

Я про примеры, которые даны в справке по qt
Записан
lesav
Частый гость
***
Offline Offline

Сообщений: 235


qnx.org.ru


Просмотр профиля WWW
« Ответ #7 : Февраль 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);
}
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.109 секунд. Запросов: 23.