Здравствуйте :)
Пытаюсь разобраться с передачей данных в qt serial port.
Мне надо написать следующую программу: в qt designer'e есть строка lineEdit, данные из которой надо передать устройству. Посмотрев примеры из справки, не до конца понял, где надо задавать конфигурацию файла и организовывать передачу ???. В конце концов, попытался сделать так:
файл pro:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4)
{
QT += widgets serialport
} else {
include($$QTSERIALPORT_PROJECT_ROOT/src/serialport/qt4support/serialport.prf)
}
TARGET = port_des_exm
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp \
masterthread.cpp
HEADERS += mainwindow.h \
masterthread.h
FORMS += mainwindow.ui
mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "masterthread.h"
#include <QtSerialPort/QtSerialPort>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
int a=0, b=0;
if (ui->radioButton->isChecked()){
a = a + 10;
}
else if (ui->radioButton_2->isChecked()){
b = b + 15;
}
ui->lineEdit->setText(QString("%1 %2").arg(a, 0, 16).arg(b, 0, 16));
m_writeData = a + b;
}
void SerialPortWriter::write(const QByteArray &writeData)
{
m_writeData = writeData;
qint64 bytesWritten = m_serialPort->write(writeData);
if (bytesWritten == -1) {
m_standardOutput << QObject::tr("Failed to write the data to port %1, error: %2").arg(m_serialPort->portName()).arg(m_serialPort->errorString()) << endl;
QCoreApplication::exit(1);
} else if (bytesWritten != m_writeData.size()) {
m_standardOutput << QObject::tr("Failed to write all the data to port %1, error: %2").arg(m_serialPort->portName()).arg(m_serialPort->errorString()) << endl;
QCoreApplication::exit(1);
}
m_timer.start(5000);
}
main.cpp:
#include "mainwindow.h"
#include <QApplication>
#include <QtSerialPort/QSerialPort>
#include <QTextStream>
#include <QCoreApplication>
#include <QFile>
#include <QStringList>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
QSerialPort serialPort;
QString serialPortName = argumentList.at(1);
serialPort.setPortName(serialPortName);
if (!serialPort.open(QIODevice::WriteOnly)) {
standardOutput << QObject::tr("Failed to open port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
return 1;
}
int serialPortBaudRate = (argumentCount > 2) ? argumentList.at(2).toInt() : QSerialPort::Baud9600;
if (!serialPort.setBaudRate(serialPortBaudRate)) {
standardOutput << QObject::tr("Failed to set 9600 baud for port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
return 1;
}
if (!serialPort.setDataBits(QSerialPort::Data8)) {
standardOutput << QObject::tr("Failed to set 8 data bits for port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
return 1;
}
if (!serialPort.setParity(QSerialPort::NoParity)) {
standardOutput << QObject::tr("Failed to set no parity for port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
return 1;
}
if (!serialPort.setStopBits(QSerialPort::OneStop)) {
standardOutput << QObject::tr("Failed to set 1 stop bit for port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
return 1;
}
if (!serialPort.setFlowControl(QSerialPort::NoFlowControl)) {
standardOutput << QObject::tr("Failed to set no flow control for port %1, error: %2").arg(serialPortName).arg(serialPort.errorString()) << endl;
return 1;
}
QFile dataFile;
if (!dataFile.open(stdin, QIODevice::ReadOnly)) {
standardOutput << QObject::tr("Failed to open stdin for reading") << endl;
return 1;
}
return a.exec();
}
Qt выдает 12 ошибок. Может ли кто-нибудь популярно объяснить мне, как надо организовать передачу данных в этом случае? Или, может быть, есть более простые примеры, чем даны в справке?
Да, уточняю: версия qt - 5.2.0, компилятор MinGW, windows 7
Да, уточняю: версия qt - 5.2.0, компилятор MinGW, windows 7
1. Нужно проверить что модуль QtSerialPort установлен в твоей Qt5. Если нет - то установить (он в addons, нужно галочку выбрать).
2. Для подключения модуля QtSerialPort в Qt5 достаточно прописать в *.pro файл твоего проекта:
QT += serialport
Т.е. после п.1 ты можешь взять сорсник любого примера из QtSerialPort, заменить в нем строку как в п.2. И пересобрать и пользоваться.
ЗЫ: И да, лучше обновиться до Qt5.2.1 (а еще лучше - взять последние сорцы QtSerialPort пересобрать и установить самотоятельно).