Задать вопрос
  • Как проще показать и редактировать список структур в таблице?

    vxblog
    @vxblog
    Инженер-программист
    Есть готовая модель. QStandardItemModel. Добавляете или удаляете строки привычными insertRows/removeRows. Устанавливаете данные с помощью setData. Привычно и всё уже реализовано.
    Ответ написан
    Комментировать
  • Почему сигнал ReadyRead() вызывается только один раз?

    vxblog
    @vxblog
    Инженер-программист
    Что ж, с вашего позволения, устрою небольшое code review.

    Установка параметров порта.
    Да, метод setPortName не возвращает ничего. Но, вызовы QSerialPort::setBaudRate, QSerialPort::setDataBits, QSerialPort::setParity, QSerialPort::setStopBits и QSerialPort::setFlowControl могут вернуть false. Пытаться открыть после этого порт явно не стоит. Лучше вызвать QSerialPort:error, чтобы обработать ошибку.

    Сигналы и слоты.
    1. Cоединить сигнал QSerialPort::readyRead со слотом ComPort::HandleReadyRead можно сразу после создания экземпляра QSerialPort. До установки параметров порта и его открытия.
    2. Однозначно, необходимо подключить сигнал QSerialPort::errorOccurred и реализовать обработку ошибок. Ну хотя бы их вывод в консоль во время отладки.
    3. Пожалуйста, не используйте макросы SIGNAL и SLOT. Переходите на функторы.


    QObject::connect (com_port_, &QSerialPort::readyRead, this, &ComPort::handleReadyRead);
    QObject::connect (com_port_, &QSerialPort::errorOccurred, this, &ComPort::handleError);


    Открытие порта.
    Метод QSerialPort::open следует вызывать только после успешной установки параметров порта (см. выше). И даже после этого он может вернуть false. В этом случае ничего не остаётся, как вызвать QSerialPort:error, чтобы отреагировать на ошибку. Кстати, это рекомендации из официальной документации.

    Чтение данных.
    Во-первых, метод чтения данных QSerialPort::read может вернуть -1 в случае ошибки. А метод QSerialPort::readAll в случае ошибки вернёт пустой QByteArray. Что нужно делать в этом случае? Правильно! Вызвать QSerialPort:error, чтобы отреагировать на ошибку.

    Во-вторых, я бы не стал полагаться на каждое срабатывание сигнала QSerialPort::readyRead, а использовал бы цикл с методом QIODevice::bytesAvailable, в котором считываются и обрабатываются все данные, о приходе которых стало известно по упомянутому выше сигналу.
    void ComPort::HandleReadyRead()
    {
      while (serial_->bytesAvailable () > 0) {
    
        // Чтение данных
        QByteArray data = serial_->readAll ();
        if (data.isEmpty ()) {
          handleError ();
          return;
        }
    
        read_buffer_.append (data);
    
        // Здесь ещё пристуствует логика обработки сообщения, я ищу символ конца
        // сообщения, и если его нахожу, то эмитирую сигнал, для вызова слота парсинга сообщения.
      }
    }


    В-третьих, на момент закрытия порта он может располагать данными, которые вы не успели прочитать. Для обработки этой ситуации, метод чтения данных следует вызвать перед закрытием порта. Возможно, это не ваш случай. Но, на моей практике он бывал много раз.

    Обработка ошибок.
    Простите, но у вас она отсутствует как класс. Реализуйте, например, предлагаемый мною ComPort::handleError.
    void ComPort::handleError (QSerialPort::SerialPortError error)
    {
      qDebug () << __LINE__ << __FUNCTION__ << error;
    }


    Заключение.
    На мой взгляд, только после указанных выше доработок можно приступить к рассмотрению вопроса по существу. И вообще хоть как-то локализовать проблему.
    Ответ написан
    Комментировать
  • Как повлияет на общую производительность апгрейд процессора в ноутбуке?

    vxblog
    @vxblog
    Инженер-программист
    Наращу память до 8 гб

    Вы можете установить 16 ГБ. И да, на вашем чипсете такой объём памяти будет работать. У меня только положительный опыт обновления нескольких ноутбуков. Использовал модули памяти Samsung и Kingston.

    Поставлю ssd samsung EVO 500 gb

    Правильное решение! Вы увидите прирост производительности собственными глазами. Кстати, в случае использования фирменного накопителя Samsung (а это ваш случай) вы можете полностью перенести ОС со всеми файлами с помощью фирменной утилиты. Ключи и серийные номера - всё сохранится!

    С учетом существующей системы охлаждения и мощности БП максимально на него станет I5-580m. Его надо искать, заказывать...

    Заказывал процессор для ноутбука с AliExpress. Ни разу не пожалел.

    Как сильно будет заметна разница в работе между 480 и 580?

    Но на практике?

    Речь идёт об обновлении Б/У ноутбука. Соревноваться в производительности с современными машинами не имеет смысла. Это другие платформы. С другими подходами и возможностями. Но, свой ноутбук вы можете подтянуть до максимально возможных показателей в своём сегменте. Вы можете закрыть этот вопрос и пользоваться прекрасной конфигурацией все следующие годы. И оно того стоит.

    И последнее. Ваш модуль Wi-Fi поддерживает 802.11n. Можно заменить на 802.11ac. Разница тоже будет заметна.

    Желаю успехов.
    Ответ написан
    Комментировать
  • Почему сам по себе редко перезагружается компьютер?

    vxblog
    @vxblog
    Инженер-программист
    А в журналах Приложение и Система есть записи об ошибках или предупреждения?
    Чтобы открыть: Win+X > Просмотр событий > Журналы Windows.
    Ответ написан
    Комментировать
  • Как отключить автоматическое разворачивание свернутых блоков кода в Visual Studio Code?

    vxblog
    @vxblog
    Инженер-программист
    Надеюсь, вот это (Turning off automatic outlining in Visual Studio) наведёт вас на нужные мысли.
    Ответ написан
    Комментировать
  • Почему иногда отваливается Wi-Fi на IdeaPad Flex 5?

    vxblog
    @vxblog
    Инженер-программист
    К сожалению, не имея доступа к ноутбуку, на котором это происходит, остаётся только высказывать пустые теории и гадать. И всё будет впустую. Если вас действительно беспокоит эта проблема и вы хотите её решить, то нужна конкретика. А ещё лучше данные, предоставляемые самой операционной системой.

    Большинство ошибок или сбоев всегда регистрируются в журналах операционной системы. Там же может быть указана даже точная причина разрыва соединения. Например, переход в режим экономии энергии. Прямо во время использования соединения. Да, увы, и такое бывает.

    Нажмите на клавиатуре Win+X, откроется контекстное меню. Выберите Просмотр событий.
    67793a97cad9b663867979.png

    В окне Просмотр событий можно просмотреть все записи об ошибках. Наибольшую ценность будут представлять записи об ошибках в разделах Приложение и Система.
    67793a9e8f053384805329.png

    Это окно можно держать открытым. И, как только произойдёт разрыв соединения, посмотреть что об этом сообщает операционная система.
    Ответ написан
  • Какую версию Windows выбрать?

    vxblog
    @vxblog
    Инженер-программист
    Читаю, что в оригинале очень много лишнего

    Нет, на свежий аппарат лучше поставить что-то лицензионное.

    Если не хочется тратиться, можно поставить Ubuntu Linux. Это абсолютно бесплатно. Офисный пакет, удалённый рабочий стол, медиаплееры и браузер - всё в комплекте. Для обычного пользователя современный Linux ничем не будет отличаться от Windows.
    Ответ написан
    Комментировать
  • Почему системник бьет током?

    vxblog
    @vxblog
    Инженер-программист
    Образование электрических зарядов на корпусе никак не связано с силой затяжки болтов.

    Кстати, сам факт наличия статики на корпусе ставит под сомнение наличие заземления, о котором вы упомянули. Ведь в этом случае заряды бы просто не скапливались, а уходили по заземляющему проводнику. Ведь это прямое его назначение - соединять корпус с землёй.

    К сожалению, люди зачастую уверяют, что у них розетки с заземлением. А потом выясняется, что в саму розетку заведены только два провода - ноль и фаза. Без заземления.
    Ответ написан
    4 комментария
  • Как устранить ошибку библиотеки C++ при обновлении игры?

    vxblog
    @vxblog
    Инженер-программист
    Приложение с обновлением завершило свою работу аварийно. Вы запускаете его в Windows 7, а ему необходим функционал, доступный в Windows 10. Поэтому, это приложение аварийно завершает свою работу. Ровно об этом и сообщает Microsoft Visual C++ Redistributable - что приложение завершило свою работу, но вовсе не так, как ожидалось.

    Единственный выход - это запустить приложение в подходящем для него окружении, с теми библиотеками из состава Windows 10, которые этим приложением используются. Больше информации можно найти в журналах системы или приложения, если они пишутся.

    В переустановке Microsoft Visual C++ Redistributable никакого особого смысла нет, ведь дело совершенно не в нём. Можно спокойно оставить самую свежую версию пакета.
    Ответ написан
    Комментировать
  • Почему не работает условие?

    vxblog
    @vxblog
    Инженер-программист
    Возможно, имеет смысл посмотреть в сторону кодировки? Например, скрипт сохранён в Windows-1251, а данные приходят в UTF-8. В этом случае, строка 'Сервер' будет выглядеть везде одинаково (в скрипте и в консоли браузера), но представлять собой совершенно разные последовательности байт. В итоге условие не выполнится никогда.
    Ответ написан
    Комментировать