Код: Выделить всё
#ifndef SETTINGSWIDGET_H
#define SETTINGSWIDGET_H
#include <QWidget>
#include <QComboBox>
#include <QLabel>
#include <QPushButton>
#include <QString>
class SettingsWidget : public QWidget
{
Q_OBJECT
public:
SettingsWidget(QWidget *parent = 0);
private:
QLabel *LabelCom, *LabelBaud;
QComboBox *CBCom, *CBBaud;
QPushButton *BtnOpen;
private slots:
void openClose(bool open);
signals:
void start(QString port, QString baud);
void stop(void);
};
#endif // SETTINGSWIDGET_H
2. В принципе как всегда дефинируем класс
3. Дефинируем слот openClose, который реагирует на сигнал нажатия на кнопку Open, состояние кнопки True или False передаётся этому слоту из сигнала
4. Дефинируем сигналы start и stop. Ну названия подобраны по-моему не очень. Но старт означает открыть порт с такими то настройками, а стоп означает закрыть порт.
SettingsWidget.cpp
Код: Выделить всё
#include <QComboBox>
#include <QGridLayout>
#include <QList>
#include <qextserialenumerator.h>
#include "SettingsWidget.h"
SettingsWidget::SettingsWidget(QWidget *parent)
: QWidget(parent)
{
LabelCom = new QLabel;
LabelCom->setText("Port");
CBCom = new QComboBox;
CBCom->setEditable(TRUE);
QList<QextPortInfo> ports = QextSerialEnumerator::getPorts();
for (int i = 0; i < ports.size(); i++)
{
CBCom->addItem(ports.at(i).portName.toLocal8Bit().constData());
}
LabelBaud = new QLabel;
LabelBaud->setText("Baud");
CBBaud = new QComboBox;
CBBaud->setEditable(TRUE);
CBBaud->addItem("110");
CBBaud->addItem("300");
CBBaud->addItem("600");
CBBaud->addItem("1200");
CBBaud->addItem("2400");
CBBaud->addItem("4800");
CBBaud->addItem("9600");
CBBaud->addItem("14400");
CBBaud->addItem("19200");
CBBaud->addItem("38400");
CBBaud->addItem("56000");
CBBaud->addItem("57600");
CBBaud->addItem("115200");
CBBaud->addItem("128000");
CBBaud->addItem("256000");
BtnOpen = new QPushButton;
BtnOpen->setText("Open");
BtnOpen->setCheckable(TRUE);
QGridLayout *layout = new QGridLayout;
layout->addWidget(LabelCom, 0, 0);
layout->addWidget(CBCom, 1, 0);
layout->addWidget(LabelBaud, 0, 1);
layout->addWidget(CBBaud, 1, 1);
layout->addWidget(BtnOpen, 1, 2);
setLayout(layout);
connect(BtnOpen, SIGNAL(clicked(bool)), this, SLOT(openClose(bool)));
}
void SettingsWidget::openClose(bool open)
{
if (open)
{
emit SettingsWidget::start(CBCom->currentText(), CBBaud->currentText());
BtnOpen->setText("Close");
}
else
{
emit SettingsWidget::stop();
BtnOpen->setText("Open");
}
}
1.1. Создаём комбобокс CBCom с лейблом "Port"
1.2. Вызываем функцию нумерации имеющихся в системе портов
1.3. Добавляем наименования портов в комбобокс
1.4. Создаём комбобокс CBBaud с лейблом "Baud"
1.5. Добавляем список известных нам baudrate
1.6. Создаём кнопку Open
1.7. Создаём layout и добавляем в него созданые элементы виджета Settings
1.8. Соединяем сигнал нажатия на кнопку со слотом openClose
2. Декларируем слот openClose (что должно происходить если этот слот вызовется каким либо сигналом)
2.1. Если в сигнале было передано состояние кнопки True, до инициируем сигнал старт в котором передаём настройки, заодно меняем надпись на кнопке
2.2. Инициируем сигнал stop и меняем надпись на кнопке