• Какие есть библиотеки для андроид для работы с серийным портом?

    EXL
    @EXL
    Энтузиаст
    В Qt есть QSerialPort, по идее эта библиотека должна работать и на Android. В любом случае, там можно подсмотреть реализацию подобного функционала.
    Ответ написан
    Комментировать
  • Как проставлять номер версии php проекта через git?

    EXL
    @EXL
    Энтузиаст
    Хм. Не знаю, как в PHP, но в проектах C++, можно обойтись без хуков. Вот пример:
    Проектный файл:

    VERSION = $$system(git describe --tags)
    isEmpty(VERSION) : VERSION = 0.9.02-dev
    DEFINES += APP_VERSION=\\\"$${VERSION}\\\"

    В C++:

    ...
    setApplicationVersion(QLatin1String(APP_VERSION));
    ...

    Итог:

    knOJvTN.png

    Уверен, что и в PHP есть для этого какое-либо решение. Вот пример:
    stackoverflow.com/questions/16334310/i-want-to-dis...
    Ответ написан
    Комментировать
  • При клонирования репозитория, клонируется только master ветка. Почему?

    EXL
    @EXL
    Энтузиаст
    Нет, клонируются все удалённые ветки. Просто они имеют префикс origin/удалённая_ветка А вот отслеживаемой становится только ветка master -> origin/master.
    Для того, чтобы сделать ещё одну отслеживаемую ветку - переключитесь на удалённую и выполните создание локальной ветки. Всё это можно сделать одной командой:

    git checkout --track -b local_branch_name origin/remote_branch_name

    Где local_branch_name - имя создаваемой ветки, origin/remote_branch_name - полное имя удалённой ветки; local_branch_name для удобства можно назвать одинаково с remote_branch_name. После выполнения команды у вас появится ветка local_branch_name, которая будет отслеживать ветку remote_branch_name на сервере.
    Ответ написан
    1 комментарий
  • Как в списке выбора ос поменять расположение систем?

    EXL
    @EXL
    Энтузиаст
    Решается переименовыванием конфигурационных файлов GRUB'а, которые формируют список ОС и командой:
    update-grub
    Ответ написан
    Комментировать
  • Как в приложении запросить права root`а?

    EXL
    @EXL
    Энтузиаст
    Посмотрите ещё как устроен Qt Installer Framework 1.5.0
    Он запрашивает права root'a (ввод пароля), если пытаешься записать что-то в директорию, недоступную для записи обычному юзеру.
    Ответ написан
    Комментировать
  • Какие книги выбрать по изучению C++?

    EXL
    @EXL
    Энтузиаст
    Комментировать
  • Как в QT отследить бездействие пользователя?

    EXL
    @EXL
    Энтузиаст
    Для Qt есть дополнительная библиотека - Qxt, в тестах есть приложение, демонстрирующее как раз то, что вам нужно: в заголовок окна выводится время простоя, когда юзер двинет мышкой или нажмет клавишу или совершит ещё какое-либо действие - счетчик сбрасывается.

    1T5jlEf.gif

    Можете использовать Qxt в своём проекте (доступны версии под Mac OS, Win и Linux), или выдернуть реализацию функции idleTime() для различных систем:
    Win, X11 (GNU/Linux), Mac OS.

    Скачать Qxt можно здесь.
    Ответ написан
    4 комментария
  • Как можно создать мод на Source SDK не покупая Half-Life 2?

    EXL
    @EXL
    Энтузиаст
    Насколько я знаю, не нужна. Black Mesa, например, не требует покупки Half-Life 2.
    Ответ написан
    Комментировать
  • Где найти полный мануал по Git?

    EXL
    @EXL
    Энтузиаст
    Github != git.
    Рекомендую книгу Scott'а Chacon'а - Pro Git.
    Ответ написан
    Комментировать
  • Как подключить Webkit в Qt 5.3.0?

    EXL
    @EXL
    Энтузиаст
    Пробовал подключить различные библиотеки:
    #include
    #include
    Во-первых, а кто вам сказал, что таким образом подключаются библиотеки в C++? Так только подключаются объявления классов и их методов. Библиотеки вы таким образом к проекту не подключите и следовательно получите закономерную ошибку линковки "undefined reference to ...". Это полностью логично, поскольку объявления вы подключили, а их реализацию - нет. Кстати, эти строки вам вообще не нужны, удалите их, они не возымеют должного эффекта, поскольку уже есть в "ui_MainWindow.h", откройте этот файл и изучите его заголовок.

    Во-вторых, вы используете слишком старую документацию, видимо, ещё для Qt 4, хотя пользуетесь Qt 5. Это заметно по:

    http://www.trolltech.com/
    и по:

    #include <QWebView>
    без префикса. Обновите вашу документацию на актуальную или поставьте Qt 4. Qt 5 был разбит на множество частей, Qt 4 более монолитен. Поэтому WebView вынесли в Qt 5 в отдельную библиотеку webkitwidgets.

    В-третьих, сайт www.trolltech.com давно мертв.

    В вашем случае для получения полностью работоспособного приложения следует в *.pro файле определить:

    QT += core gui webkit webkitwidgets
    и убрать:

    #include <QtWebKitWidgets/QWebView>
    #include <QtWebKit>

    Оттуда, куда вы это сами вставили.

    Полностью рабочее приложение, компилирующееся на Qt 5 будет выглядеть как-то так:

    project.pro:
    #-------------------------------------------------
    #
    # Project created by QtCreator 2014-06-09T02:41:10
    #
    #-------------------------------------------------
    
    QT       += core gui webkit webkitwidgets
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    
    TARGET = untitled3
    TEMPLATE = app
    
    
    SOURCES += main.cpp\
            MainWindow.cpp
    
    HEADERS  += MainWindow.h
    
    FORMS    += MainWindow.ui

    main.cpp:
    #include "MainWindow.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
    
        return a.exec();
    }

    mainwindow.h:
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    private:
        Ui::MainWindow *ui;
    
    private slots:
        void on_pushButton_clicked();
    };
    
    #endif // MAINWINDOW_H

    mainwindow.cpp:
    #include "MainWindow.h"
    #include "ui_MainWindow.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::on_pushButton_clicked()
    {
        ui->webView->setUrl(QUrl("http://www.habrahabr.ru"));
    }

    Удачи!
    Ответ написан
    Комментировать
  • Почему не компилируется код C++ на Mac OS?

    EXL
    @EXL
    Энтузиаст
    Вы видимо создали один проект и помещаете в него все примеры. Линковщик, видя, что функция main() продублирована несколько раз, выдает вам закономерную ошибку. Типичная ошибка новичка. Вам необходимо перейти на концепцию: для каждого примера - отдельный проект.

    И еще посоветую не использовать кириллические символы в путях к директориям с кодом:
    /Users/Egor/Library/Developer/Xcode/DerivedData/Обучение-flagdgvimqnhjweohxodemobrqre/Build/Intermediates/Обучение.build/Debug/Обучение.build/Objects-normal/x86_64/main.o


    Лучше заменить на
    /Users/Egor/Library/Developer/Xcode/DerivedData/Training-flagdgvimqnhjweohxodemobrqre/Build/Intermediates/Training.build/Debug/Training.build/Objects-normal/x86_64/main.o</build>
    Ответ написан
    Комментировать
  • Какую книжку прочитать по электричеству?

    EXL
    @EXL
    Энтузиаст
    Мне очень нахваливали книгу "Борисов В.Г. - Юный радиолюбитель (1992)", сказали, что азы там разжеваны весьма подробно. Увы, из-за нехватки свободного времени я так и не успел ознакомиться с этой литературой. Но поскольку человек, который мне посоветовал эту книгу - профессионал в радиоэлектронике, я советую вам ознакомится с этой книгой в первую очередь.
    Ответ написан
    3 комментария
  • Оiибка при подключении QDomDocument в Qt

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

    QT += xml
    В ваш проектный файл "*.pro". Никакой магии тут нет.
    Ответ написан
    2 комментария
  • Как программе удалить саму себя?

    EXL
    @EXL
    Энтузиаст
    Для распространения своей утилиты под различными операционными системами вы можете воспользоваться кросс-платформенным установщиком Qt Installer Framework 1.5.0. Если мне не изменяет память - возможность удаления программы там присутствует. А вообще лучше всего сделать так:
    Для Windows - установщик, который создает в меню "Пуск" ярлык на "unist.exe", удаляющий программу.
    Для Linux - deb-пакет/tar.gz-пакет. Функция удаления линуксоидам не нужна, эту задачу решит пакетный менеджер, против которого ставить софт не рекомендуется.
    Насчет Mac OS/OS X не знаю, но думаю там есть возможность удаления установленного приложения из каталога установленных программ.

    Делать внутри программы функцию удаления этой программы - весьма плохой тон.
    Ответ написан
    Комментировать
  • Как добавить/исправить недостающие заголовки при компиляции ?

    EXL
    @EXL
    Энтузиаст
    Но эффекта ни какого , может нужно внести изменения в makefile ?

    Конечно. Исправлять пути к header'ам в исходниках - плохой тон. В Makefile следует исправлять переменную:

    INCLUDES = -I/usr/local/include/php -I/usr/local/include/php/main ...


    Добавив в неё корректный путь к заголовочным файлам. А вообще подобные проблемы должны решаться на этапе конфигурирования, т.е. следует поставить путь к необходимым файлам до генерации Makefile:

    CPPFLAGS="-I/usr/include/ -I/usr/include/php" ./configure ...
    Ответ написан
  • Как хранить выбранный option в select?

    EXL
    @EXL
    Энтузиаст
    @savostin не понимаю, в чем именно ваша проблема. В Qt есть удобные классы для хранения настроек - QSettings. На примере: есть опции в программе, к примеру, выбор языка и QCheckBox. Пусть каждому языку соответствует индивидуальный идентификатор: Английский - "en", Русский - "ru", Испанский - "es". Опция "Cool Option", охарактеризована QCheckBox'ом.

    Создаете объект класса QSettings, создаете методы "loadSetting()" и "saveSettings()". При запуске программы метод "loadSetting()" осуществляет чтение настроек из файла или реестра, а затем, в соответствии с прочитанными настройками, расставляет выбор опций в интерфейсе. После завершения работы с программой вызывается метод "loadSetting()", который сохраняет все настройки пользователя.

    Очень удобно использовать для этой цели *.ini-файлы:

    [PDA_Maze]
    TimerMode=0
    MapMode=1
    MapSize=29
    ShowStep=false
    ScaleScreen=0
    SmoothScreen=false
    AppLanguage=ru


    Пример подобной реализации сохранения настроек можно посмотреть тут.
    Ответ написан
  • Определение максимального среди неповторяющихся элементов матрицы (C++)

    EXL
    @EXL
    Энтузиаст
    #include <iostream>
    #include <vector>
    #include <cstdlib>
    #include <climits>
    
    void fill_vector(size_t x,
                     size_t y,
                     int range,
                     std::vector< std::vector <int> > &aVector)
    {
        for (size_t i = 0; i < x; ++i) {
            std::vector <int> temp_vector;
            for (size_t j = 0; j < y; ++j) {
                temp_vector.push_back(rand() % range);
            }
            aVector.push_back(temp_vector);
        }
    }
    
    void print_vector(const std::vector< std::vector <int> > &aVector)
    {
        for (size_t i = 0; i < aVector.size(); ++i) {
            for (size_t j = 0; j < aVector.at(0).size(); j++) {
                std::cout << aVector.at(i).at(j) << "\t";
            }
            std::cout << std::endl;
        }
    }
    
    bool unique(int aElem,
                const std::vector <int> &aVector)
    {
        int j = 0;
        for (size_t i = 0; i < aVector.size(); ++i) {
            if (aElem == aVector.at(i)) {
                ++j;
            }
        }
    
        return (j > 1) ? false : true;
    }
    
    int determine_max_elem(const std::vector< std::vector <int> > &aVector)
    {
        int max_elem = INT_MIN;
    
        std::vector <int> temp_vector;
        for (size_t i = 0; i < aVector.size(); ++i) {
            for (size_t j = 0; j < aVector.at(0).size(); j++) {
                temp_vector.push_back(aVector.at(i).at(j));
            }
        }
    
        for (size_t i = 0; i < temp_vector.size(); i++) {
            if (max_elem < temp_vector.at(i) &&
                    unique(temp_vector.at(i), temp_vector)) {
                max_elem = temp_vector.at(i);
            }
        }
    
        return max_elem;
    }
    
    int main()
    {
        std::vector< std::vector <int> > vector;
    
        fill_vector(5, 5, 10, vector); // Fill 2D 5x5 Matrix
        print_vector(vector);
    
        int max = determine_max_elem(vector);
        if (max != INT_MIN) {
            std::cout << "\nMax element is: " << max << std::endl;
        } else {
            std::cout << "\nMax element in matrix isn't found!" << std::endl;
        }
    
        return 0;
    }


    Решение на C++ в лоб, без применения умных алгоритмов.
    Ответ написан
    4 комментария
  • Как разобратся с ошибкой Unsupported protocol в cURL в QtCreator?

    EXL
    @EXL
    Энтузиаст
    https

    Если не ошибаюсь, то cURL должен быть собран с поддержкой этого протокола. То есть тянуть в зависимостях еще и openssl. Проблема в библиотеке cURL. Пробуйте собрать openssl, затем cURL с поддержкой SSL:

    ./configure --with-ssl
    Ответ написан
    5 комментариев
  • Среда разработки C++?

    EXL
    @EXL
    Энтузиаст
    Лично я советую вам Qt Creator - сейчас эта IDE активно поддерживается разработчиками, в отличие от всяких там Code::Blocks и Dev-Cpp.
    Еще можно посмотреть в сторону Eclipse, если не пугает его неповоротливость и объемность.
    Для Hello World'ов и простейших задачек можно пользоваться VIM/GVIM, но он сложен в настройке и не совсем подходит под понятие IDE. Это просто крутой хакерский текстовый редактор.
    Ответ написан
    4 комментария