Ответы пользователя по тегу Qt Creator
  • Как подключить autotools библиотеку к qmake проекту?

    EXL
    @EXL
    Энтузиаст
    Лучше всего будет переехать с системы сборки autotools на QMake/QBS. Я делал это таким образом:
    Для каждой платформы сконфигурировал библиотеку, сохранив файлы "config.h". Затем на каждой платформе собрал библиотеку, сохранив лог сборки в файл: make &> make.log На основе полученных данных и файлов ручками написал платформонезависимый "*.pro"-файл, полностью интегрировав библиотеку в проект и избавившись от монструозного autotools. На это ушло приблизительно 1.5-часа, в библиотеке было приблизительно 50 "*.c" и "*.h"-файлов.
    Ответ написан
  • Почему программа не работает вне Qt Creator?

    EXL
    @EXL
    Энтузиаст
    Я вижу несколько способов разрешения зависимостей.
    Во-первых, можно собрать libcurl и libjansson статически и прилинковать к вашему приложению.
    Во-вторых, помимо статических libcurl и libjansson можно собрать сам Qt тоже в статику и прилинковать к вашему приложению. На выходе вы получите исполнительный файл большого размера (размер можно урезать с помощью утилиты upx), который будет запускаться во всех современных дистрибутивах GNU/Linux, где есть иксы.
    В-третьих, самый рациональный способ - собрать DEB- или RPM-пакет, в котором в зависимостях прописать пакеты libcurl3(4), libjansson4, и необходимые модули с qt4(5).

    Ну а запустить сам бинарь просто. У вас в Qt Creator'е есть переменная окружения LD_LIBRARY_PATH. Просто скопируйте в терминал её значение перед запуском программы:
    LD_LIBRARY_PATH="/opt/QtSDKs/Qt5.3.1/5.3/gcc_64/lib:/opt/QtSDKs/Qt5.3.1/5.3/gcc_64/lib:/home/user/projects/jansson/lib:$LD_LIBRARY_PATH" ./my_cool_app


    Curl у вас, похоже, собран статически. Попробуйте собрать jansson тоже в статику. Тогда ошибки error while loading shared libraries: libjansson.so.4: cannot open shared object file: No such file or directory вы не получите.
    Ответ написан
  • Оiибка при подключении QDomDocument в Qt

    EXL
    @EXL
    Энтузиаст
    Читайте Assistant и Qt-документацию. Проблему должно исправить добавление строки:

    QT += xml
    В ваш проектный файл "*.pro". Никакой магии тут нет.
    Ответ написан
  • Подключение OGRE3D к QT

    EXL
    @EXL
    Энтузиаст
    Недостаточно информации.
    Вы хотите использовать контекст Ogre3D в Qt-приложении? Или же вы хотите просто использовать интегрированную среду разработки Qt Creator для написания программ с помощью Ogre3D SDK и без какого-либо использования самого Qt?

    Насчет crash'а - скорее всего у библиотек из Ogre3D SDK, которые вы скачали, и объектников вашего приложения разный ABI, отсюда и падение. Например, библиотеки Ogre3D SDK собраны с помощью MinGW 4.6.2, а у вы компилируете программу компилятором, идущим с Qt 5.3.0, то есть с помощью MinGW-w64 4.8.2. При линковке никаких предупреждений не будет, но программа не запустится.
    Ответ написан
  • QT QFile С++ Как считать из файла числа в массив?

    EXL
    @EXL
    Энтузиаст
    #include <QVector>
    #include <QFile>
    #include <QString>
    #include <QTextStream>
    #include <QStringList>
    
    #include <iostream>
    
    const QString allFileToString(QFile &aFile)
    {
        if (!aFile.open(QFile::ReadOnly | QFile::Text)) {
            std::cout << "Error opening file!" << std::endl;
            return NULL;
        }
        QTextStream in(&aFile);
        return in.readAll();
    }
    
    void setDataToVector(const QStringList &aStringList,
                         QVector< QVector <int> > &aVector)
    {
        size_t x = aStringList.size() - 1; // Count of line, 8
        size_t y = aStringList.at(0).count("\t") + 1; // Count of digits in line, 6
    
        for (size_t i = 0; i < x; ++i) {
            QVector<int> temp_vector;
            for (size_t j = 0; j < y; ++j) {
                temp_vector.push_back(aStringList.at(i).split("\t").at(j).toInt());
            }
            aVector.push_back(temp_vector);
        }
    }
    
    void printVector(const QVector< QVector <int> > &aVector)
    {
        for (int i = 0; i < aVector.size(); ++i) {
            for (int j = 0; j < aVector.at(0).size(); ++j) {
                std::cout << aVector.at(i).at(j) << "\t";
            }
            std::cout << std::endl;
        }
    }
    
    int main(/*int argc, char *argv[]*/)
    {
        QVector< QVector <int> > vector;
        QFile file("test.txt");
    
        setDataToVector(allFileToString(file).split("\n"), vector);
    
        printVector(vector);
    
        return 0;
    }
    Ответ написан