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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 [2] 3 4
16  Qt / Вопросы новичков / Снифер COM порта и не только. Win7 - WinXP : Август 14, 2016, 20:20
Здравствуйте, Уважаемые.

Встал вопрос по мониторингу COM портов.
Нужно читать трафик по обмену программы на ПК с устройством на COM порту.

Подскажите какие технологии используются.
Как это реализовать для Win7 и XP.

Подскажите направление с чего начать, что читать и прочее.

Еще вопрос, есть ли в природе бесплатный нормально работающий снифер для Win7.

17  Qt / Вопросы новичков / Как добавить QCheckBox в горизонтальный заголовок QTableView : Апрель 29, 2015, 22:11
Сделал через переопределение
Код:
class CheckBoxHeader : public QHeaderView
{
    Q_OBJECT

public:
    CheckBoxHeader(Qt::Orientation orientation, QWidget* parent = 0);
    bool isChecked() const { return isChecked_; }
    void setIsChecked(bool val);
signals:
    void checkBoxClicked(bool state);
protected:
    void paintSection(QPainter* painter, const QRect& rect, int logicalIndex) const;
    void mousePressEvent(QMouseEvent* event);
private:
    bool isChecked_;
    void redrawCheckBox();
};

Пример нашел в сети, но работает оно как то тоскливо.

Ведь можно же установить свой виджет в заголовок через setIndexWidget

сделал так
Код:
      // Получаем указатель на заголовок
      QHeaderView *header = ui->tableAlert->horizontalHeader();
      // Устанавливаем ему виджет типа QCheckBox
      header->setIndexWidget(QModelIndex().child(0, 3), new QCheckBox("test",ui->tableAlert));
Но не получается CheckBox устанавливается в самый левый угол заголовка.
Я так понимаю в setIndexWidget первым параметром нужно передать QModelIndex который указывает на нужную мне ячейку
заголовка.
То что в примере QModelIndex().child(0, 3) это одна из моих версий.
Пробовал по разному все равно CheckBox появляется только в самом левом верхнем углу заголовка.

Может есть решение.
18  Qt / Вопросы новичков / Re: Как правильно сделать масштабирование приложения под разные разрешения дисплея. : Апрель 13, 2015, 19:50
Думаете правильно, просто недооцениваете проблему.
В общем серьезнее отнеситесь, пример, код - все получится.  А не так себе "текст съезжает" (с пол-пинка не пошло)

Сегодня целый день провел за компановкой и игрался с sizePolicy небольшие сдвиги есть.
Так же изменил размер шрифта в более мелкую сторону.

QLayout и QSizePolicy реально работают, ни одного бага я не находил. Ничего кроме букваря (assisiant) не требуется. Да, некоторые вещи лично для меня не интутивны, типа "ожидал так, а оно...", приходилось делать тестовые примеры и экспериментировать - но в конце-концов работало как указано в доке.

Я просто думал что есть некий общий подход к проектированию для разных разрешений экрана.
Типа как это сделано в Андроиде. Для разных разрешений можно сделать разные лайауты.
И потом все автоматом решается.

Вот например есть у меня экран 23 дюйма 1920х1080 для него можно вывести текст 24 шрифтом и все помешается.

Для ноута 1600х900 это сильно круто и нужен шрифт 16.
19  Qt / Вопросы новичков / Re: Как правильно сделать масштабирование приложения под разные разрешения дисплея. : Апрель 13, 2015, 19:47
Вы просите решить проблему и не показываете её.
Не надо так!!!

Да вся компановка в Designer сделано не знаю как ее показать.


20  Qt / Вопросы новичков / Re: Как правильно сделать масштабирование приложения под разные разрешения дисплея. : Апрель 13, 2015, 15:22
если много лейблов и полос редактор смотрите в сторону хотя бы QGridLayout, а лучше QFormLayout  Подмигивающий

Да дело в том что все в QGridLayout и сделанно.
В форме вся компоновка произведена полностью.
21  Qt / Вопросы новичков / Как правильно сделать масштабирование приложения под разные разрешения дисплея. : Апрель 13, 2015, 15:01
Здравствуйте.

Сделал приложение на Qt 4.8.4.
Делал на мониторе 23 дюйма с разрешением 1920х1080.
Дело в том что в приложении очень много лейбелов и полос редактирования.

При запуске на том же ноутбуке разрешение 1600х900 получается фигня полная.
Текст съезжает.
Полосу прокрутки ставить не хочется.

Скажите в какую сторону копать.

Что то не могу найти ясного ответа.

Сам думаю, что нужно  при запуске программы проверять разрешение системы.
После чего настраивать размер шрифта в окнах.

Подскажите как правильно масштабировать приложение..

Еще вопрос есть ли где почитать про  sizePolicy то что нашел не дает полного понимания.
Вернее сказать я им пользуюсь но не знаю насколько правильно.

22  Qt / Работа с сетью / Re: Libmodbus как узнать что COM порт закрылся : Апрель 06, 2015, 18:07
Спасибо за ответы.
Понял что не так все просто.
Нашел пример с SetupApi, нда там не особо все просто.
Плюс boost используют.
Отсавил пока на потом.
Нужно проект в целом сделать.


23  Qt / Работа с сетью / Re: Libmodbus как узнать что COM порт закрылся : Апрель 05, 2015, 12:55
Спасибо за подсказку.
Короче где то я взял чей то пример и тупо воткнул в проект.
И этот кто то правил исходник libmodbus.

Стянул с официального сайта и собрал библиотеку.
Все так же заработало.

Но теперь при доступе к адресу устройства которого нет на шине modbus
Получаем тоже errno == 10060
А если отключтить USB-RS232 от компа то вообще нет никаких ошибок
errno == 0
24  Qt / Работа с сетью / Re: Libmodbus как узнать что COM порт закрылся : Апрель 05, 2015, 12:09
числовое значение errno, а не то что возвратила strerror...

errno == 10060 (0x274C)

в моей libmodbus такой нет... версия? источник?
#define LIBMODBUS_VERSION        3.1.1
Вот с источником не уверен.
Хм... спасибо что на мысель натолкнули счас с сайта скачаю проверю.


25  Qt / Работа с сетью / Re: Libmodbus как узнать что COM порт закрылся : Апрель 05, 2015, 10:01
а сам errno какой? и на какой платформе дело происходит?

errno == "Unknown error"

Причем эта  ошибка как в случае если нет ответа от удаленного устройства.
Так и если  (Доктор вырвет провода) отсоединить Rs485 адаптор рт USB.

Объясните зачем в libmodbus вот эта функция modbus_poll();
Я ее тоже прицепил так как в примере она была.
Работает она у меня по таймеру.

Но без нее тоже все работает если по таймеру читать
 res = modbus_read_registers( m_serialModbus, reg, numReciveByte, buf16 );

Документация по libmodbus просто никакая.

Причем если заглянуть во внутрь modbus.c
Код:
const char *modbus_strerror(int errnum) {
    switch (errnum) {
    case EMBXILFUN:
        return "Illegal function";
    case EMBXILADD:
        return "Illegal data address";
    case EMBXILVAL:
        return "Illegal data value";
    case EMBXSFAIL:
        return "Slave device or server failure";
    case EMBXACK:
        return "Acknowledge";
    case EMBXSBUSY:
        return "Slave device or server is busy";
    case EMBXNACK:
        return "Negative acknowledge";
    case EMBXMEMPAR:
        return "Memory parity error";
    case EMBXGPATH:
        return "Gateway path unavailable";
    case EMBXGTAR:
        return "Target device failed to respond";
    case EMBBADCRC:
        return "Invalid CRC";
    case EMBBADDATA:
        return "Invalid data";
    case EMBBADEXC:
        return "Invalid exception code";
    case EMBMDATA:
        return "Too many data";
    case EMBBADSLAVE:
        return "Response not from requested slave";
    default:
        return strerror(errnum);
    }
}

Есть же расшифровки ошибки что мне нужно
"Response not from requested slave"
"Slave device or server failure";

Почему тогда  res = modbus_read_registers( m_serialModbus, reg, numReciveByte, buf16 );
не отрабатывает эту ошибку
26  Qt / Работа с сетью / Re: Libmodbus как узнать что COM порт закрылся : Апрель 05, 2015, 09:48
Это нормально, USB такой вот информативный. Возьмите MOXA NPort, например, 5150, в режиме TCP Server Mode и таких проблем не будет. И быстрее будет работать.
Да нельзя у заказчика уже все купленно.
27  Qt / Работа с сетью / Libmodbus как узнать что COM порт закрылся : Апрель 04, 2015, 12:24
Здравствуйте.
Есть сеть MODBUS-RTU Rs-485 80 устройств.
Устройства из себя предстовляют контроллеры OWEN ПЛК73.
Соответсвенно нужно ее опрашивать.

Прикрутил для начала libmodbus http://libmodbus.org/

На форуме нашел что кто то с ней работает.
Все заработало почти с полпинка, есть но.

В качестве транспорта использую RS485 который подключен к COM порту компа.
Причем это виртуальный порт переходник USB-RS232.

Если идет обращение к сушествующему адресу то связь есть
функция чтения возвращает количество прочитанных байт.
Код:
// Читаем регистры
 res = modbus_read_registers( m_serialModbus, reg, numReciveByte, buf16 );


Если идет запрос к устройству которого нет на шине  modbus_read_registers возвращает -1 что как бы логично.
А вот дальше если раскрыть эту ошибку
Код:
errorStr = modbus_strerror(errno);

То получаем "Unknown error"

Если просто отключить виртуальный COM порт
То снова получим эту же ошибку "Unknown error"

Вот интересно это libmodbus не умеет определять что случилось или я что то не так делаю.
Допустим есть сеть одно устройсво пропало, не ответило по тайм ауту значит его нет на связе.
Ком порт отвалился тоже можно определить.

Документация крайне скудна.
Поскажите может есть что по приличнее чем libmodbus.
Сам обмен как бы работает, но ведь нужно обработать и не штатные ситуации.
Свое писать что то не хочется.

28  Qt / Qt-инструментарий / Re: QtCreator как втянуть проект типа откытого ПО, или AutotoolsProjectManager : Ноябрь 18, 2014, 11:05
Да вот тоже смотрю какой то не доделанный AutotoolsProjectManager.

Думал может я туплю где то.

Ведь по сути все зависимости есть для того что бы создать окружение.
29  Qt / Qt-инструментарий / Re: QtCreator как втянуть проект типа откытого ПО, или AutotoolsProjectManager : Ноябрь 18, 2014, 10:28
Спасибо за ответ но это я видел.

Тут дело в другом не могу настроить что бы работал AutotoolsProjectManager.

Я могу отдельно втянуть проект в QtCreator как это делается по Вашей ссылке.

Могу открыть файл или проект типа Makefile.am в этом случае сработает плагин AutotoolsProjectManager и будет создан проект, причем сразу будет найден  configure.ac который так же содержится в пректе.

Сами исходники втянуты не будут.
Если, импортировать проект, как Вы указали то будет создан новый проект и в этом случае AutotoolsProjectManager не работает. Причем если в этот импортированный проект добавить  Makefile.am и configure.ac то все равно плагин не заработает.

Где то на буржуйском форуме нашел, что нужно вначале импортировать проект, а потом открыть файл Makefile.am и задать этим проектам им одно и тоже имя. Пробовал тоже не сработало.
В дипетчере висят два проекта с одним и тем же именем.

Думаю проблема в том, что в QtCretor нельзя импортировать файлы в существующий проект. Можно только создать новый импортированный проект.
30  Qt / Qt-инструментарий / QtCreator как втянуть проект типа откытого ПО, или AutotoolsProjectManager : Ноябрь 18, 2014, 01:12
Здравствуйте, уважаемые.

Периодически встречаются проекты к которым прилагаются только make файл.
Типа соберайте, да еще некотрые заточены под инструментарий Linux, хотя и собираются под Win.

Собрать то его можно а вот для того что бы поковыряться в коде нужно прикручивать нечто.

В QtCreatore есть  плагин AutotoolsProjectManager при помощи его можно втянуть файл make.am.
тут же подгружается configure.ac и все. Больше ничего не происходит.
Я ожидал что он как бы автоматом подрузит и файлы проекта которые как бы лежат в этой же директории.
Ничего подобного их нужно самому подгружать, а это не сильно удобно если проект большой.

Вот интересно нет ли какого удобного способа подключить такой проект.

Может инструметарий не от Qt существует.

Меня в данный момент интересует проект openOcd.
Нужно немного с ним поиграться.

Может кто знает в каком IDE с ним работают.

Страниц: 1 [2] 3 4

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