Просмотр сообщений
|
Страниц: [1]
|
1
|
Qt / Вопросы новичков / QTextEdit. Перемещение по строкам(параграфам)
|
: Ноябрь 16, 2021, 09:32
|
Доброго дня! Не могу понять, как можно перемещаться по строкам(параграфам) в QTextEdit. Я добавляю строки командой QTextEdit::append. Но есть ли команда, с помощью которой можно переместиться, например, на вторую строку(параграф) и далее заместить ее? спасибо
|
|
|
2
|
Qt / Работа с сетью / Re: QTcpSocket. Хост найден, но далее возникает ошибка NetworkError
|
: Ноябрь 01, 2021, 07:27
|
Короче, ответ был неожиданно найден,и он вверг в меня удивление и ступор со словами "какого органа...". Есть функция socket->connectToHost(ipStr, ipport); . Если стринговая ipStr представлена в виде айпи адреса "192.168.127.012", то не происходит соединение, а если представить в виде "192.168.127.12", то все нормально, все работает, есть коннект. Далее узнал еще более интересные вещи, когда попытался применить класс QHostAddress, создавая его экземпляр QHostAddress("192.168.127.012"), и видя, как айпи адрес вдруг превращается в "192.168.127.10". Вот вопрос ко всем, почему цифры с начальным нулем функции,работающие с сетью,воспринимают как будто это записано в восьмеричной системе исчисления??? Что интересно,если я записываю адрес "192.168.127.090", то вообще полный крах происходит.
|
|
|
4
|
Qt / Работа с сетью / QTcpSocket. Хост найден, но далее возникает ошибка NetworkError. Решено.
|
: Октябрь 30, 2021, 09:11
|
Доброго дня! Пытаюсь подсоединиться к прибору, на котором стоит адаптер MOXA, работающий в режиме TCP Server. Естественно, на компе есть подсеть, в которую входит этот прибор. Задействовал сигналы connect(socket, &QTcpSocket::readyRead, this, &ProtectWindow::socketReadySlot); connect(socket, &QTcpSocket::disconnected, this, &ProtectWindow::socketDisconnectSlot); connect(socket, &QTcpSocket::hostFound, this, &ProtectWindow::hostFoundSlot); connect(socket, &QTcpSocket::connected, this, &ProtectWindow::connectedSlot); connect(socket, &QTcpSocket::stateChanged, this, &ProtectWindow::stateChangedSlot);
Пытаюсь соединиться с хостом socket->connectToHost(ipaddress, ipport); В дебаге вывожу и получаю такие сообщения: QAbstractSocket::HostLookupState QAbstractSocket::ConnectingState host found QAbstractSocket::UnconnectedState socket error: "Error: An error occurred with the network (e.g., the network cable was accidentally plugged out)."
Я новичок в работе с TCP. Не понимаю,почему компонент QTcpSocket не может соединиться с хостом? С компа прибор с тем айпи адресом пингуется норм.
|
|
|
5
|
Qt / 2D и 3D графика / Re: Qwt. QwtPlotZoomer. сигнал zoomed
|
: Октябрь 29, 2021, 10:38
|
По идее можно выводить значения курсора прямо на холст, чтобы посмотреть координаты Нужно создать QwtPlotPicker с заданным trackerMode = QwtPicker::AlwaysOn
это я делаю. Но я хотел с помощью зумирования раскрыть сигнал на размер прямоугольника зума, но не могу узнать размер резинки зума
|
|
|
6
|
Qt / 2D и 3D графика / Qwt. QwtPlotZoomer. сигнал zoomed
|
: Октябрь 29, 2021, 10:18
|
Доброго дня! Проблема вышла с зумированием графика. Когда растягиваю резинку и отпускаю ее, то испускается сигнал zoomed(const QRectF &rect). Сигнал рисуется в районе 0.0004 +- шум. Так вот, как только я пытаюсь зумировать этот сигнал, то значения rect->bottom и rect->top упираются в значения -0.004(top) и 0.005(bottom) по оси Y, хотя резинку зума я провожу на границах сигнала. Это что, ограничение класса такое? Как я могу узнать действительные значения top и bottom резинки?
|
|
|
7
|
Qt / Вопросы новичков / Re: Проблема с получением данных с помощью QSerialPort::waitForReadyRead()
|
: Сентябрь 25, 2021, 14:22
|
Вы сначала определитесь - хотите понять, как организовать синхронный обмен с портом или нет. Если появится желание, то поможем. Очень хочу,но мне непонятно, как организовать синхронный обмен с помощью сигналов и слотов. Как идет работа с шиной у нас: операция чтения данных происходит в последовательности: 1. запрос данных 2. чтение данных 3. запрос статуса 4. чтение статуса для подтверждения чтения данных операция записи команд/данных происходит в последовательности: 1. запись команды 2.чтение статуса для подтверждения записи команд/данных внутри этих блоков все должно идти последовательно. Читаться данные должны как можно быстрее и постоянно. Сделал отдельный неграфический поток, в котором в функции run() идет постоянный опрос шины через QSerialPort, чтоб не зависал графич.интерфейс Если делать с помощью сигналов-слотов, то надо же как-то синхронизировать отправку сигнала с получением данных, да еще чтоб друг за другом все шло. Вот это непонятно,как сделать.
|
|
|
9
|
Qt / Вопросы новичков / Проблема с получением данных с помощью QSerialPort::waitForReadyRead()
|
: Сентябрь 25, 2021, 08:28
|
Доброго всем дня Версия Qt 5.14.2 Суть проблемы. Реализуется синхронный обмен данными с устройством. Необходим постоянный опрос данных по шине. Устройству посылаются команды, на которые получаются подтверждения выполнения, далее тут же идет опрос данных с их подтверждениями. Реализовать это с помощью механизма сигнал-слот чрезвычайно запутанно и геморрно. Наиболее подходящий метод - это реализация работы с последовательным портом с помощью waitForReadyRead() и waitForBytesWritten() в отдельном неграфическом потоке, в котором идет постоянный опрос шины(запись команд в порт и считывание данных с порта). Тем более, что есть в Qt пример работы Blocking Master и Blocking Slave. Так вот столкнулся с проблемой,что, послав запрос на пакет данных, waitForReadyRead() сообщает,что есть данные, но с помощью readAll() считывается только часть пришедшего пакета, а потом хоть сиди в этом waitForReadyRead() - он уже не сообщает о наличии данных. Хотя полностью весь пакет пришел - это видно с помощью шпиона компорта,который пришлось подключить для прослушки. Когда же я повторно запрашиваю данные, то пара waitForReadyRead() - readAll() выдает мне вместе вторую часть непришедшего вовремя пакета и часть следующего пакета. Но это для моей задачи уже бесполезно,т.к. я не могу дать подтверждение на пакетное получение данных. кусок проги такой // запись данных serial.write(dataRequest); // ожидание записи в порт if (serial.waitForBytesWritten(100) == false) return false;
// ожидание прихода полного кадра flag = true; *receivear = new QByteArray(); receive = *receivear;
do{ // ждем ответные данные if (serial.waitForReadyRead(100) == false){ qDebug() << "fail"; return false; };
// считывание данных readData = serial.readAll(); while (serial.waitForReadyRead(10)) readData += serial.readAll(); qDebug() << "Data read: " << readData.toHex(' ');
// анализ кадра if (cadrAnalysis(readData, *receive) == true) flag = false; } while (flag);
Этот кусок кода из функции,которая вызывается из void ProtocolThread::run(),соответственно, ProtocolThread это потомок QThread. Я вполне понимаю,что сейчас прибегут гуру и скажут, что надо работать с помощью механизма "сигнал-слот", но, извините, Qt задекларировала функцию waitForReadyRead(), и она должна работать нормально, а не через пень колоду. Да и механизм "сигнал-слот" в моем случае не подходит. Вопрос такой у меня: что можно сделать с этим waitForReadyRead(), чтобы все заработало? Если делаю вызов waitForReadyRead(-1), то просто поток блокируется на этом вызове, хотя данные из устройства в компорт пришли. Согласно справке, waitForReadyRead() блокируется до тех пор, пока новые данные не будут доступны для чтения и не будет выдан сигнал readyRead(). Получается,что на вторую часть пакета этот сигнал не выдается и waitForReadyRead() не разблокируется. Попробовал сделать опрос с помощью механизма "сигнал-слот", подготовив предварительно устройство к опросу с помощью другой программы, то в этом случае видно,что часто пакет считывается полностью после обработки двух последовательно пришедших сигналов readyRead() ПС. Эта проблема заметилась,когда начал читать пакеты с длиной более 250 байт. Когда надо было читать пакеты с длиной 64 байта, было все нормально
|
|
|
10
|
Qt / Работа с сетью / QTcpSocket. Повторное открытие
|
: Август 27, 2021, 09:31
|
ВОПРОС СНЯТ. При обработке сигнала disconnected вызывал функцию socket->deleteLater(). Изза этого и проблема была Доброго времени суток! Сильно не пинайте, только начал изучать сетевые дела в Qt. Создаю TCP-клиента для подключения к прибору. Проблема возникла с переподключением, после которого программа аварийно срубается. Открываю соединение как обычно socket->connectToHost(ipaddress, ipport); Закрываю соединение Получаю сигнал disconnected. Далее снова пытаюсь сделать socket->connectToHost(ipaddress, ipport); на чем программа благополучно вылетает. Пробовал закрыть с помощью Эффект тот же Что не так делается?
|
|
|
|
|