Ответы пользователя по тегу Qt
  • Как подключить qt к проекту с помощью cmake?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Если вы используете класс QImage, то в официальной документации написано, какие строки надо добавить в CMakeLists.txt (https://doc.qt.io/qt-6/qimage.html):
    find_package(Qt6 COMPONENTS Gui REQUIRED)
    target_link_libraries(mytarget PRIVATE Qt6::Gui)
    Ответ написан
  • Почему крешится используя update и repaint?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Я не слишком понимаю, какую конкретно проблему вы пытаетесь решить. Если напишите, то будет легче помочь.
    На всякий случай, уточню, что то что вы описали -- это следствия потенциально неправильного решения некоторой реальной проблемы. Например, для работы с анимацией уже есть готовые решения.

    Касательно кода, вам как минимум надо вызывать event->accept() и к слотам func_1/2 присоединяться с аргументом Qt::QueuedConnection (а не вызывать их напрямую вроде obj->foo()). Тогда и мьютекс не понадобится.
    Касательно объекта типа QPainter, его лучше создавать в обработчике события, как и рекомендуется в официальной документации.

    На вопрос же "почему оно случайно падает?" ответить просто невозможно, не имея как минимум полного кода приложения, параметров компиляции, запуска и знаний об операционной системе. После этого надо собрать Qt в отладочном режиме, собрать с ним приложение и смотреть потоки в отладчике и их состояние. Но я не уверен, что это всё необходимо, принимая во внимание первый абзац. Строго говоря, проблема может быть совсем не в том участке кода, который вы привели, да и код может быть совсем другой надо написать. Очень мало данных.
    Ответ написан
  • QT C++ Почему код так отличается?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Почему код на C++ , отличается от кода на qt?

    Вопрос изначально неверно сформулирован. Надо было написать "от кода, написанного с использованием Qt". На ваш взгляд есть визуальные отличия, но это потому что Qt предоставляет свои API.

    Чтобы вывести Hello world! в c++ нужно : cout << "Hello world!" << endl;
    А в Qt (будем считать, что это рописано в функции кнопки): qDebug() << "Hello world!";

    Вариант с cout будет точно так же работать.

    И вообще является ли qt отдельным языком программирования(Если да, то где лучше всего почитать про него)?

    Нет, Qt -- это не отдельный язык программирования, а набор библиотек или фреймворк (зависит от того, как использовать) + набор инструментов.
    Однако же, для разработки UI, с Qt можно использовать отдельный язык, который называется QML. Но можно и не использовать.
    Ответ написан
    Комментировать
  • Как поставить webkit с qt4 на Ubuntu 18?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Ну что-то вроде:
    sudo apt-get install -y libqt4-webkit
    Или libqtwebkit4

    Я просто даже не знаю, как там на Убунте пакеты называются. У меня другая операционная система и вот так пакет называется: libQtWebKit4.
    Ответ написан
  • Exception при добавлении QGraphicsItem на сцену?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    В C++ все указатели надо проверять на null перед использованием. У вас явно какой-то указатель null.
    Вот этот код ещё выглядит подозрительным:
    allObj=new ball(0,this->height(),10);
    gameBoard->scene()->addItem( ballObj->getBall());

    Результат new присваивается одной переменной, а потом используется другая. Допускаю, что это опечатка.
    Как я уже и писал выше, надо проверить результат вызова scene() на null (скорее всего, именно тут ошибка), равно как и сам gameBoard.
    И ещё одно, вы должны понимать, что после вызова метода addItem(ballObj->getBall()), возвращённый объект перейдёт под управление сцены (об этом в документации написано) и может быть удалён в любой момент. При этом, кто должен удалить ballObj в вашем коде не ясно.

    PS
    Это не исключение.
    Ответ написан
    Комментировать
  • Почему могут не открываться файлы для записи в QT?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Ну в ресурс, насколько я помню, писать нельзя. А вот читать из него можно.
    Если хотите писать в файл, то указывайте его не как ресурс.
    Ответ написан
    1 комментарий
  • Qt - как передать сигнал?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Этот emit улавливается сценой, и передается всем виджету по цепочке выше, пока не дойдет до QTextEdit.

    Это не совсем так. Сигнал и событие -- разные вещи в Qt. Сигнал "улавливается" приёмниками, к которым он присоединён. Таких приёмников может быть ноль или несколько. Приёмник это обычно слот другого объекта или лямбда-функция.

    То есть, если вы хотите что-то передать непосредственно в QTextEdit и там есть нужный вам слот, то можете соединить слот и сигнал напрямую. Если нет, то можете создать слот (или просто любой метод) в каком-нибудь классе, который наследуется от QObject и выполнить там необходимые преобразования. Ну или лямбда-функцию использовать.
    Ответ написан
    Комментировать
  • Как в QT заблокировать action в menu?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    if (auto action = qobject_cast<QAction*>(sender())) {}
    Ответ написан
    3 комментария
  • Как составить регулярное выражение для QString?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Можно как-то так написать, но это уж для совсем простого случая:
    QRegularExpression("^\\d+(.\\d+)?$").match(myString).hasMatch()

    К слову, у QString есть методы для преобразования строки в число.
    Ответ написан
    1 комментарий
  • Как собрать библиотеку .lib [muParser]?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Так там же CMakeLists.txt в корне есть. Что-то вроде "mkdir build && cd build && cmake .. && make" (виндовый аналог этого) не работает?
    Ответ написан
    Комментировать
  • Есть ли в Qt парсер математических выражений?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Если прям совсем вот парсер, то нет. А если их надо просто вычислять, то да: https://doc.qt.io/qt-5/qjsengine.html
    Ответ написан
    Комментировать
  • Как подключить библиотеку dll в QtCreator?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Если имеется ввиду qmake (*.pro файл), то:
    LIBS *= "path_to_dll"
    INCLUDEPATH *= "path_to_headers"

    Ну а в коде просто иклюдить как обычно после этого.

    С CMake проектами будет иначе. К слову, скоро Qt официально перейдёт на CMake.
    Ответ написан
    23 комментария
  • Как создать класс, расширяющий библиотеку C++ под QT для работы в QML?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Скорее всего, вы просто не зарегистрировали тип с помощью qmlRegisterType. Это нужно сделать для всех классов, которые будут использоваться в QML. Тут есть больше деталей: https://doc.qt.io/qt-5/qtqml-cppintegration-define...

    Есть ещё вот такая техника: https://doc.qt.io/qt-5/qtqml-cppintegration-define...
    Возможно, это именно то, что вам необходимо.
    Ответ написан
    Комментировать
  • Система сборка QBS - скорее мертва, чем жива?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Qbs официально не поддерживается. Возможно кто-то из сообщества будет что-то делать, но не The Qt Company. Сборка самой Qt уже активно переводится на CMake. Этот генератор систем сборки и будет официально поддерживаемым. Поэтому, оставайтесь на CMake.
    Ответ написан
    Комментировать
  • Статическая компиляция QT?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Так можно сделать, для этого вам нужна статическая сборка Qt. Только в профайл вашего проекта ещё надо будет добавить static в переменную config.
    Ответ написан
  • Площадка, где ищут разработчиков, готовых работать за еду?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Добро пожаловать: https://bugreports.qt.io/ . У нас куча багов и фич, за которые вам не будут платить :)
    Ответ написан
    Комментировать
  • Как сделать так, чтобы окно открывалось один раз и единственный(как при регистрации)?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    В Qt есть класс QSettings. Он предназначен для хранения настроек приложения. Можно использовать его, в документации есть примеры использования. Алгоритм таков:
    1) Проверяете есть ли некоторое значение в настройках
    2) Если есть, не показываете окно. Если нет, то показываете окно и устанавливаете значение.

    Если действительно нужен механизм регистрации, то тут всё несколько сложнее.
    Ответ написан
    4 комментария
  • Какой контейнер/методология сможет заменить Map из JavaScript?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Насчёт JS не знаю, но, судя по описанию, вам необходима структура данных, которая называется FlatMap (есть например в бусте), ну или по крайней мере, сильно на неё похожая.
    В общем и целом, можете написать свою структуру данных вроде std::vector<std::pair<KeyType, ValueType>>. Ну а базовый контейнер выбрать в зависимости от того, какие операции будут применяться к структуре наиболее часто, я просто вектор для примера привёл.

    К слову
    В QList индексы просто по порядку должны идти, без пропусков и не получится сразу взять и вставить на 42 место.

    Подразумевает наличие 42 элементов (не важно пустых или нет), что вам, кажется, не надо. Поэтому, уточните плз, какую задачу вы решаете и какие реально есть требования к структуре данных.

    upd.
    Посмотрел доку на JS, похоже там реально flat map.
    Ответ написан
  • На чем выполняется рендер gui в Qt?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    QML по дефолту на GPU. С версии 5.8 можно на CPU рендерить. Почитайте про scene graph, там всё очень подробно расписано.
    Ответ написан
    4 комментария