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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1]
1  Qt / Вопросы новичков / Re: Установка скорости com-порта через combobox : Декабрь 05, 2023, 10:08
Спасибо за совет!
2  Qt / Вопросы новичков / Установка скорости com-порта через combobox : Декабрь 04, 2023, 15:00
Хочу в программе сделать установку скорости ком-порта через combobox. Добавил combobox, написал следующий код.

void MainWindow::on_baudRateBox_activated(int index_baud) //скорость
{
     QSerialPort serialPort;
   if(index_baud == 0)
   {
       serialPort.setBaudRate(QSerialPort::Baud115200);

   }
  else if(index_baud == 1)
   {
       serialPort.setBaudRate(QSerialPort::Baud38400);

   }
   else if(index_baud == 2)
   {
       serialPort.setBaudRate(QSerialPort::Baud19200);

   }
   else if(index_baud == 3)
   {
       serialPort.setBaudRate(QSerialPort::Baud9600);

   }

}

Добавил кнопку применить, в ней код следующий.
void MainWindow::on_pushButton_6_clicked()// кнопка применения настроек com-порта
{
    QSerialPort serialPort;

    ui->baudRateBox->currentIndex();
    ui->dataBitsBox->currentIndex();
    ui->parityBox->currentIndex();
    ui->comboBox->currentIndex();
}
То есть устанавливаю значения согласно текущих индексов combobox. Далее кнопка передать.

void MainWindow::on_pushButton_clicked()//кнопка передачи
{
    QSerialPort serialPort;

    serialPort.setPortName(this->ui->cmbPort->currentText());  // указали имя к какому порту будем подключаться

 //  serialPort.setBaudRate(QSerialPort::Baud115200);.......

и вот здесь почему то надо заново указывать скорость, то есть если строка со скоростью закомментирована передача не происходит. Возможно ли как то обойти эту проблему. Или при передаче каждый раз надо устанавливать скорость?
И еще хотел спросить можно ли как то прочитать именно текущую установленную скорость а не все поддерживаемые скорости ком-порта с помощью QSerialPortInfo::standardBaudRates().





3  Qt / Вопросы новичков / Re: Вывод QList в окно : Декабрь 04, 2023, 07:51
Спасибо, так работает
4  Qt / Вопросы новичков / Вывод QList в окно : Декабрь 03, 2023, 18:42
Здравствуйте, хочу вывести значения скоростей ком-порта в окно, не могу разобраться как это сделать.
 ui->txtOutput->QList<qint32> baudRates = QSerialPortInfo::standardBaudRates(); так не работает, пишет что нет такого члена в классе QtextEdit. Как можно решить данную ситуацию?
5  Qt / Вопросы новичков / Re: очистка содержимого окна : Ноябрь 10, 2023, 09:57
Оказывается это очень просто сделать надо было всего лишь вызвать метод clear();

в программе это выглядит так.
void MainWindow::on_pushButton_2_clicked()
{

    this->ui->txtOutput->clear();
 
}

Может кому то пригодится данный совет.
6  Qt / Вопросы новичков / Re: очистка содержимого окна : Ноябрь 10, 2023, 07:37
это текст или символы который идет с ком-порта, я посмотрел программу терминал из примеров qt, там есть очистка принятых данных. Но какая функция или метод так я и не понял.
7  Qt / Вопросы новичков / очистка содержимого окна : Ноябрь 09, 2023, 16:44
Всем привет! Может кто-нибудь подсказать как сделать очистку содержимого окна при нажатии кнопки. То есть какой метод использовать? Сам пока не могу разобраться.
8  Qt / Вопросы новичков / Re: Работа с ком-портом в Qt : Ноябрь 09, 2023, 15:13
Спасибо вам, вы правы
9  Qt / Вопросы новичков / Работа с ком-портом в Qt : Ноябрь 09, 2023, 11:12
Всем привет, пробую освоить Qt. Хочу написать программу терминал для работы с ком-портом.
Не могу разобраться с такой вещью.
serialPort.write("a"); - если вставить эту функцию в обработчик кнопки, то все корректно отправляется в порт. Теперь я хочу чтобы в порт отправлялось, то что я введу в программе.
Я через редактор формы добавляю строку даю ей имя txtInput  и пишу так:
 serialPort.write(this->ui->txtInput->text()); - так не работает, компилятор ругается. Как правильно отправить данные в порт, которые я буду вводить в строку в программе?
10  Qt / Вопросы новичков / глобальные и локальные переменные в qt : Май 06, 2021, 20:14
Я новичок, по ссылке http://cs.tealeaf.su/serial-port-gui.html попробовал создать программу для опроса ком-порта. У меня в принципе все получилось, все работает. Теперь немного хочу доработать программу, то есть чтобы таймер не сразу гнал данные в порт, а только после нажатия кнопки, и после нажатия другой соответственно останавливался. Думал сделать это через глобальные переменные. и написал так:
это main.cpp
#include "mainwindow.h"

#include <QApplication>

 int i;
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

extern int i;


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT
 в h файле прописал extern, то есть вроде как объявил глобальную переменную.



Дальше


файл mainwindow.cpp

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // создали таймер, привязали его к форме
        // если ругается на QTimer ставим на него курсор и нажимаем Alt+Enter
        // чтоб на автомате добавить #include <QTimer>


        QTimer *timer = new QTimer(this);

        // подключили сигнал timeout, к слоту нажатия на кнопку
        connect(timer, SIGNAL(timeout()), this, SLOT(on_pushButton_4_clicked()));

        // запускаем со значением вызывать раз в 300мс
if(i >0)
{
    timer->stop();
}else
{
    timer->start(300);
}


    foreach (const QSerialPortInfo &serialPortInfo, QSerialPortInfo::availablePorts())
       {
           ui->cmbPort->addItem(serialPortInfo.portName());
       }


}

MainWindow::~MainWindow()
{
    delete ui;
}

здесь подразумеваю что глобальная переменная 0 и программа каждые 300 мс как бы нажимает кнопку и получает данные это все работает.
ниже кнопка.

void MainWindow::on_pushButton_4_clicked() //получение данных с датчика
{

 


    QSerialPort serialPort;

        serialPort.setPortName(this->ui->cmbPort->currentText());
        serialPort.setBaudRate(QSerialPort::Baud9600);

       if (!serialPort.open(QIODevice::ReadWrite)) {
        //    QMessageBox::warning(this, "Ошибка", "Не удалось подключится к порту");
            return;
        }

       serialPort.write("e");
       serialPort.waitForBytesWritten();
        // ВСЕ ЧТО ВЫШЕ ЭТОГО НЕ ТРОГАЕМ

        QByteArray data;  // специальный тип QT для хранения последовательности байтов
        while (serialPort.waitForReadyRead(10)) {
            // вместо холостого чтения накапливаем результат в переменную data
            data.append(serialPort.readAll());
        }

        // добавляем строку с содержимым data в поле txtOutput
        ui->txtData->append(data);
     
        serialPort.close();

}

тут все работает, теперь дальше кнопка остановки

void MainWindow::on_pushButton_5_clicked() //прекращение получения данных
{
   
 i++;

} как я думал, глобальная переменная становится больше на 1 и таймер в соответствии с условием выше должен остановиться.
if(i >0)
{
    timer->stop();
}else
{
    timer->start(300);
}

Но нет как гнал он данные так и гонит. В чем может быть ошибка?
Еще может кто нибудь подсказать как мне очистить окно от полученных данных. То есть по нажатию кнопки?
Возможно вопросы мои наивные но я только начинаю в это входить.






Страниц: [1]

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