Ответы пользователя по тегу Qt
  • Как получить id из поля TableView?

    @ittakir
    Сигнал об изменении текущего выбранного элемента посылает не QTableView, а его QItemSelectionModel.
    QItemSelectionModel *QAbstractItemView::selectionModel() const

    Подписывайтесь на сигнал
    void currentChanged(const QModelIndex &current, const QModelIndex &previous)

    И далее из QModelIndex достаете необходимые данные, такие как текст, ряд, столбец.
    Ответ написан
  • Как проверить что по serial пришел полный пакет данных?

    @ittakir
    Ответ зависит от того, кто вам засылает данные в COM порт, в каком формате.
    По хорошему, нужно как-то маркировать конец пакета данных. Это либо передавать сначала количество данных, потом сами данные. Либо передавать специальный символ конца пакета, например "\n\n". Либо просто по таймауту, когда данные идут непрерывным потоком, а если данных не было более чем 1 секунду, то считаем что пакет завершен.
    Скорее всего вам подойдет последний вариант.
    Ответ написан
    Комментировать
  • Почему компилятор не пишет, что не может найти мою библиотеку?

    @ittakir
    Попробуй подключить через полный путь, например:
    LIBS += C:/TwinCAT/AdsApi/TcAdsDll/Lib/TcAdsDll.lib
    Ответ написан
    Комментировать
  • Как убрать "Update documentation" при загрузке Qt Creator?

    @ittakir
    Найти в исходниках Qt Creator этап Update Documentation и отключить его, затем собрать из исходников. Только вот не думаю что это просто так запускается. Возможно, перестанет работать помощь в редакторе по нажатию F1.
    Ответ написан
    Комментировать
  • Существует ли какой-то оверхед при использовании CSS в Qt?

    @ittakir
    Qt сами рекомендуют стилизовать контролы именно через setStyleSheet().
    Под капотом, думаю, что просто задаются значения набору параметров виджета, а дальше видже при отрисовке просто использует эти значения, т.е. каждый кадр парсинг стиля не происходит.
    Безусловно, нужно время, чтобы распарсить текст стилей, но оно мизерное, в реальной работе я не замечал каких-то проблем с отрисовкой.
    Через stylesheet можно задавать значение и своим параметрам, достаточно только объявить их определенным образом.
    Ответ написан
    2 комментария
  • Как сделать чтобы открывался только один инстанс дочернего окна?

    @ittakir
    Как у вас происходит показ окна? Вы скорее всего создаете новый объект с помощью new, устанавливаете ему какие-то параметры и вызываете show().
    Если вы хотите чтобы было видно не более одного экзумпляра окна, вы не можете создавать объекты с помощью new, вы должны вызвать какую-то функцию, которая предоставит вам готовый объект (новый или уже существующий). Как она будет реализована - решать вам. Самое простое - глобальная переменная. Далее можно её скрыть в классе MainWindow и выдавать по запросу через публичный метод MainWindow. Плюсом этого подхода будет то, что можно MainWindow сделать родителем этого объекта, а значит он автоматически удалится при завершении программы и отображаться будет тоже вместе с главным окном. Можно сделать и синглтон, но тут нужно внимательно следить, когда он будет создан и будет ли удален потом.
    Ответ написан
    5 комментариев
  • Как настроить драйвер для БД на QT creator?

    @ittakir
    Для sqlite не нужно ничего компилировать и подкладывать, все должно работать из коробки.
    db_ = QSqlDatabase::addDatabase("QSQLITE");
    db_.setDatabaseName("mydatabase.db");
    // db_.setConnectOptions("QSQLITE_OPEN_READONLY"); // Если нужно открыть в Read-only
    db_.open();
    // QSqlQuery q(db_);
    // q.exec("PRAGMA foreign_keys = ON"); // Если нужны Foreign keys


    Вам же написали: QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
    Используйте эти имена драйверов в точности как написано, заглавными буквами.
    Ответ написан
  • Как подключить библиотеку dll в QtCreator?

    @ittakir
    Чтобы подключить DLL библиотеки в *.pro файле нужно добавить:
    LIBS += полный путь до файла.lib

    Либо для системных библиотек:
    LIBS += -lUser32

    DLL библиотека состоит из .lib, .h и .dll файлов. Для сборки .exe нужны .lib и .h. Потом при запуске .exe где-то рядом должен лежать .dll.

    После изменения pro файла обязательно нужно кликнуть правой кнопкой на проект и запустить Run Qmake.
    Ответ написан
    Комментировать
  • Переобразовать код символа из юникода в win1251?

    @ittakir
    Используйте QTextCodec
    QChar ch(1040);
    QTextCodec *codec = QTextCodec::codecForName("Windows-1251");
    QByteArray result = codec->fromUnicode(&ch, 1);
    unsigned char value = result[0]; // 192
    Ответ написан
    1 комментарий
  • Как правильно следует избавляться от вложенных циклов?

    @ittakir
    Не вижу особой проблемы в вашем коде.
    Формат путей файлов строго определен, поэтому не нужно никаких рекурсий.
    Вся работа разбивается на 2 шага:
    1. Определить какие типы текстур доступны.
    2. Загрузить все текстуры для каждого из типов.

    Я бы разбил эту логику на 2 отдельных функции. Первая возвращает список доступных типов, причем тип задается enum, а функция внутри сопоставляет текстовое название папки с enum.
    QList<TextureType> getAvailableTextureTypes();

    Вторая функция берет на вход тип текстуры и загружает все доступные файлы этого типа.
    QList<Texture> loadTexturesForType(TextureType type);


    Ну и основная функция загрузки:
    QMap<TextureType, QList<Texture>> loadTextures()
    {
      QMap<TextureType, QList<Texture>> result;
      for (auto type : getAvailableTextureTypes()) {
        result.insert(type, loadTexturesForType(type));
      }
      return result;
    }
    Ответ написан
    Комментировать