ARRka  1.05
controllerwindow.cpp
Idź do dokumentacji tego pliku.
1 #include "inc/controllerwindow.h"
2 #include "ui_controllerwindow.h"
3 
16 ControllerWindow::ControllerWindow(QSettings *serialSettings, QWidget *parent) :
17  QDialog(parent),
18  _ui(new Ui::ControllerWindow),
19  _serialSettings(serialSettings)
20 {
21  _ui->setupUi(this);
22 
23  _validator = new QIntValidator(0, 4000000, this);
24  //ui->baudRateBox->setInsertPolicy(QComboBox::NoInsert);
25 
27  fillPortsInfo();
28 }
29 
31 {
32  delete _validator;
33  delete _ui;
34 }
35 
37 {
38  fillPortsInfo();
40 }
41 
47 {
48  if (index == -1) //gdy brak dostępnych portów
49  return;
50 
51  const QStringList list = _ui->portBox->itemData(index).toStringList();
52  _ui->descriptionLabel->setText(tr("Opis: %1").arg(list.count() > 1 ? list.at(1) : tr(" ")));
53  _ui->locationLabel->setText(tr("Lokalizacja: %1").arg(list.count() > 2 ? list.at(2) : tr(" ")));
54 }
55 
62 {
63  bool isCustom = !_ui->baudRateBox->itemData(index).isValid();
64  _ui->baudRateBox->setEditable(isCustom);
65  if (isCustom) {
66  _ui->baudRateBox->clearEditText();
67  QLineEdit *edit = _ui->baudRateBox->lineEdit();
68  edit->setValidator(_validator);
69  }
70 }
71 
77 {
78  _ui->baudRateBox->clear();
79  _ui->baudRateBox->addItem(QStringLiteral("9600"), QSerialPort::Baud9600);
80  _ui->baudRateBox->addItem(QStringLiteral("19200"), QSerialPort::Baud19200);
81  _ui->baudRateBox->addItem(QStringLiteral("38400"), QSerialPort::Baud38400);
82  _ui->baudRateBox->addItem(QStringLiteral("115200"), QSerialPort::Baud115200);
83  //_ui->baudRateBox->addItem(tr("Własna"));
84  _ui->baudRateBox->setCurrentIndex(_serialSettings->value("serial/indexBaudRate",3).toInt());
85 
86  _ui->dataBitsBox->clear();
87  _ui->dataBitsBox->addItem(QStringLiteral("5"), QSerialPort::Data5);
88  _ui->dataBitsBox->addItem(QStringLiteral("6"), QSerialPort::Data6);
89  _ui->dataBitsBox->addItem(QStringLiteral("7"), QSerialPort::Data7);
90  _ui->dataBitsBox->addItem(QStringLiteral("8"), QSerialPort::Data8);
91  _ui->dataBitsBox->setCurrentIndex(_serialSettings->value("serial/indexDataBits",3).toInt());
92 
93  _ui->parityBox->clear();
94  _ui->parityBox->addItem(tr("None"), QSerialPort::NoParity);
95  _ui->parityBox->addItem(tr("Even"), QSerialPort::EvenParity);
96  _ui->parityBox->addItem(tr("Odd"), QSerialPort::OddParity);
97  _ui->parityBox->addItem(tr("Mark"), QSerialPort::MarkParity);
98  _ui->parityBox->addItem(tr("Space"), QSerialPort::SpaceParity);
99  _ui->parityBox->setCurrentIndex(_serialSettings->value("serial/indexParity",0).toInt());
100 
101  _ui->stopBitsBox->clear();
102  _ui->stopBitsBox->addItem(QStringLiteral("1"), QSerialPort::OneStop);
103  _ui->stopBitsBox->addItem(QStringLiteral("2"), QSerialPort::TwoStop);
104  _ui->stopBitsBox->setCurrentIndex(_serialSettings->value("serial/indexStopBits",0).toInt());
105 }
106 
111 {
112  _ui->portBox->clear();
113  _ui->descriptionLabel->setText(tr("Opis: "));
114  _ui->locationLabel->setText(tr("Lokalizacja: "));
115  QString description;
116  auto infos = QSerialPortInfo::availablePorts();
117  for (const QSerialPortInfo &info : infos) {
118  QStringList list;
119  description = info.description();
120  list << info.portName()
121  << (!description.isEmpty() ? description : tr(" "))
122  << info.systemLocation();
123 
124  _ui->portBox->addItem(list.first(), list);
125  }
126 
127  if (infos.size() > 1) {
128  _ui->portBox->setCurrentIndex(_serialSettings->value("serial/indexName",1).toInt());
129  }
130 }
131 
136 {
137  _serialSettings->setValue("serial/name",_ui->portBox->currentText());
138  _serialSettings->setValue("serial/indexName",_ui->portBox->currentIndex());
139  _serialSettings->setValue("serial/baudRate",static_cast<QSerialPort::BaudRate>(
140  _ui->baudRateBox->itemData(_ui->baudRateBox->currentIndex()).toInt()));
141  //_serialSettings->setValue("serial/baudRate",_ui->baudRateBox->currentText().toInt());
142  _serialSettings->setValue("serial/indexBaudRate",_ui->baudRateBox->currentIndex());
143  _serialSettings->setValue("serial/dataBits",static_cast<QSerialPort::DataBits>(
144  _ui->dataBitsBox->itemData(_ui->dataBitsBox->currentIndex()).toInt()));
145  _serialSettings->setValue("serial/indexDataBits",_ui->dataBitsBox->currentIndex());
146  _serialSettings->setValue("serial/parity",static_cast<QSerialPort::Parity>(
147  _ui->parityBox->itemData(_ui->parityBox->currentIndex()).toInt()));
148  _serialSettings->setValue("serial/indexParity",_ui->parityBox->currentIndex());
149  _serialSettings->setValue("serial/stopBits",static_cast<QSerialPort::StopBits>(
150  _ui->stopBitsBox->itemData(_ui->stopBitsBox->currentIndex()).toInt()));
151  _serialSettings->setValue("serial/indexStopBits",_ui->stopBitsBox->currentIndex());
152  _serialSettings->setValue("serial/flowControl",QSerialPort::NoFlowControl);
153 }
154 
163 {
164  showPortInfo(index);
165 }
166 
177 {
178  checkCustomBaudRate(index);
179 }
180 
186 {
187  updateSettings();
188  emit connectToSerial();
189  hide();
190 }
191 
197 {
198  emit disconnectFromSerial();
199  hide();
200 }
201 
206 {
207  updateSettings();
208 }
void on_connectButton_clicked()
Obsługuje naciśnięcie przycisku "Połącz".
QSettings * _serialSettings
Ustawienia portu szeregowego.
Definicja przestrzeni nazw interfejsu użytkownika.
void updateSettings()
Aktualizuje ustawienia portu szeregowego.
void connectToSerial()
Sygnał połączenia do portu.
ControllerWindow(QSettings *serialSettings, QWidget *parent=nullptr)
Konstruktor ControllerWindow.
void fillPortsParameters()
Wypełnia pola parametrów portu szeregowego.
void on_portBox_currentIndexChanged(int index)
Obsługuje zmianę parametru w obiekcie portBox.
void disconnectFromSerial()
Sygnał rozłączenia od portu.
Klasa ControllerWindow.
~ControllerWindow()
Destruktor klasy ControllerWindow.
Definicja klasy ControllerWindow.
void update()
Aktualizuje stan okna ControllerWindow.
void on_saveButton_clicked()
Obsługuje naciśnięcie przycisku "Zapisz".
void checkCustomBaudRate(int index)
(nieużywana) Sprawdza, czy zaznaczono własą prędkość.
void on_baudRateBox_currentIndexChanged(int index)
Obsługuje zmianę parametru w obiekcie baudRateBox.
void fillPortsInfo()
Wypełnia dostępne pory i informacje o nich.
void on_disconnectButton_clicked()
Obsługuje naciśnięcie przycisku "Rozłącz".
Ui::ControllerWindow * _ui
Interfejs okna.
QIntValidator * _validator
Walidator wprowadzonych intów (używany przy baudrate)
void showPortInfo(int index)
Wyświetla informację o aktualnie wybranym porcie.