Ответы пользователя по тегу Linux
  • Существует ли готовая универсальная GUI-обертка для консольных программ?

    EXL
    @EXL
    Энтузиаст
    Обратите внимание на связку Tcl/Tk, одна из областей применения этой связки — создание графических интерфейсов для консольных программ (пакетов программ). Насколько мне известно, Tcl/Tk использует в своей поставке популярнейшая консольная утилита Git. Думаю код из примеров поможет вам справиться с вашей задачей.
    Ответ написан
    Комментировать
  • Почему программа не работает вне 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 вы не получите.
    Ответ написан
    Комментировать
  • Есть ли стандарт для line separator?

    EXL
    @EXL
    Энтузиаст
    Если у вас имеется Git-репозиторий, то можно выполнить:

    git config --global core.autocrlf input
    Благодаря этому параметру код, полученный из репозиториев, на всех системах будет точно с таким же переносом строк, как и в репозитории. Однако, перед записью в репозиторий окончания строк будут конвертированы в LF. Эта настройка удобна для кросс-платформенной разработки в Unix-like системах, но так же может использоваться и в Windows. А если в Windows вам срочно потребуется CRLF, просто измените параметр input на true, таким образом при выгрузке кода из репозитория на машине пользователя будут CRLF-переносы, тогда как в самом репозитории так и останутся LF-переносы строк.
    Ответ написан
    Комментировать
  • Возможно ли перепрограммировать флешку на эмулятор клавиатуры?

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


    Правильный ход мыслей. Такие девайсы существуют. Гуглите "хакерские визитки".

    FNYY46TGQ5PYP4K.MEDIUM.jpg

    Прочитав инструкцию на визитке, её обладатель подключает оную к USB-порту компьтера, затем запускает Notepad, нажимает несколько раз Caps Lock и видит приветствие/доп. информацию от хакера, которая вводится как раз методом эмуляции клавиатуры.

    Флешку в такое устройство не переделать, однако засунуть подобное железо в корпус флешки можно.
    Ответ написан
    1 комментарий
  • Как отобразить пробелы в VIM (ВСЕ пробелы, а не только trailing)?

    EXL
    @EXL
    Энтузиаст
    Сталкивался тоже с такой проблемой, так и не нашёл вменяемого решения. Очень привык, к тому, как визуализирует пробелы и табы Qt Creator.

    QH39XFC.png

    Так можно сразу найти проблемы с форматированием кода.
    Подпишусь на вопрос, если вы найдёте решение вне этого ресурса, пожалуйста сообщите об этом мне (коннтакты в профиле).
    Ответ написан
    1 комментарий
  • Как в списке выбора ос поменять расположение систем?

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

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

    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 ...
    Ответ написан
  • Реализация gui на Windows/Linux без установки сложных библиотек

    EXL
    @EXL
    Энтузиаст
    Есть очень легкий FLTK, но выглядит он, мягко говоря, ужасно.
    Советую вам ориентироваться вот по этому сравнению кросс-платформенных графических тулкитов/фреймворков, который составили разработчики LXDE при переходе с GTK+ на Qt.

    Лично мой выбор - Qt 4.X.X. С помощью статической сборки и утилиты upx возможно получить stand-alone приложение в одном EXE-файле, не зависящее от различных dll'ок.
    Ответ написан
    2 комментария
  • Elementary OS на vmware player не во весь экран. В чем проблема?

    EXL
    @EXL
    Энтузиаст
    Нужно скачать и установить VMWare Tools в гостевой машине.
    Ответ написан
    3 комментария
  • Кросс-компиляция программ?

    EXL
    @EXL
    Энтузиаст
    Все программы, использующие SDL или Qt. Например:
    Qt Creator
    PPSSPP
    Otter Browser (аналог браузера Opera 12)
    Clementine
    CoolReader3
    qBittorrent

    Если ресурсы позволяют в список можно добавить Firefox и Thunderbird.
    Ответ написан
    Комментировать
  • Linux - Как записать строку в другой кодировке в объект string в c++?

    EXL
    @EXL
    Энтузиаст
    Попробуйте привести строки к одной общей кодировке, а затем сравнить. Для этого можно воспользоваться библиотекой libiconv:

    main.cpp:
    #include <iostream>
    #include <fstream>
    #include <cstdlib>
    
    using namespace std;
    
    #include <iconv.h>
    
    string iconv_recode(const string from, const string to, string text)
    {
        iconv_t cnv = iconv_open(to.c_str(), from.c_str());
    
        if (cnv == (iconv_t) - 1) {
            iconv_close(cnv);
            return "";
        }
    
        char *outbuf;
        if ((outbuf = (char *) malloc(text.length()*2 + 1)) == NULL) {
            iconv_close(cnv);
            return "";
        }
    
        char *ip = (char *) text.c_str(), *op = outbuf;
        size_t icount = text.length(), ocount = text.length()*2;
    
        if (iconv(cnv, &ip, &icount, &op, &ocount) != (size_t) - 1) {
            outbuf[text.length()*2 - ocount] = '\0';
            text = outbuf;
        } else {
            text = "";
        }
    
        free(outbuf);
        iconv_close(cnv);
    
        return text;
    }
    
    void compare_strings(const string &aString1, const string &aString2) {
    
        cout << "String 1: " << aString1 << endl
             << "String 2: " << aString2 << endl;
    
        if (aString1 == aString2) {
            cout << "Identical strings!" << endl
                 << "-----" << endl;
        } else {
            cout << "Different strings!" << endl
                 << "-----" << endl;
        }
    }
    
    int main()
    {
        ifstream file_1("word_1.txt");  // The "Proverka" Word in UTF-8
        ifstream file_2("word_2.txt");  // The "Proverka" Word in CP1251
        string word_1, word_2;
    
        file_1 >> word_1;
        file_2 >> word_2;
    
        compare_strings(word_1, word_2);
    
        word_2 = iconv_recode("CP1251", "UTF-8", word_2);
    
        compare_strings(word_1, word_2);
    
        return 0;
    }


    exl@exl-Lenovo-G560e:~/SandBox/text_enc > enca -L russian  word_1.txt 
    Universal transformation format 8 bits; UTF-8
      Doubly-encoded to UTF-8 from ISO-8859-5
    exl@exl-Lenovo-G560e:~/SandBox/text_enc > enca -L russian  word_2.txt 
    MS-Windows code page 1251
      LF line terminators
    exl@exl-Lenovo-G560e:~/SandBox/text_enc > cat word_1.txt 
    Проверка 
    exl@exl-Lenovo-G560e:~/SandBox/text_enc > cat word_2.txt 
    ��������
    exl@exl-Lenovo-G560e:~/SandBox/text_enc > ./text_coding 
    String 1: Проверка
    String 2: ��������
    Different strings!
    -----
    String 1: Проверка
    String 2: Проверка
    Identical strings!
    -----
    Ответ написан
    1 комментарий
  • Анимация в виджете qt на qpainter - как поставить паузу?

    EXL
    @EXL
    Энтузиаст
    Вы неправильно рисуете. Попробуйте так:

    qpaintwidget.cpp:
    #include "qpaintwidget.h"
    
    #include <QPainter>
    #include <QDebug>
    
    QPaintWidget::QPaintWidget(QWidget *parent)
        : QWidget(parent)
    {
        offset = 0;
        resize(800, 600);
    
        paintTimer = new QTimer(this);
        paintTimer->start(10);
        connect(paintTimer, SIGNAL(timeout()), this, SLOT(updatePixmap()));
    }
    
    void QPaintWidget::paintEvent(QPaintEvent *)
    {
        QColor whitebrush = Qt::white;
        QColor blackbrush = Qt::black;
        QColor redbrush = Qt::darkRed;
        QPainterPath path;
        QPainter painter(this); // Создаём новый объект рисовальщика
        painter.setRenderHint(QPainter::Antialiasing);
        painter.setPen(Qt::NoPen);
        painter.translate(1 + offset, 0);
        painter.setBrush(whitebrush);
        painter.drawRect(0, 0, width(), height());
        QPoint triangle[3] = {
            QPoint(180, 450),
            QPoint(220, 450),
            QPoint(200, 555),
        };
        painter.setBrush(blackbrush);
        painter.drawEllipse(10, 15, 380, 380);
        painter.setBrush(redbrush);
        painter.drawEllipse(35, 8, 330, 330);
        painter.setBrush(whitebrush);
        painter.drawEllipse(50, -5, 300, 330);
        painter.setBrush(blackbrush);
        painter.drawPolygon(triangle, 3);
        path.setFillRule(Qt::WindingFill);
        path.addRect(180, 250, 40, 200);
        path.addRect(150, 250, 100, 20);
        painter.drawPath(path);
        painter.setBrush(whitebrush);
        painter.drawEllipse(120, 260, 60, 20);
        painter.drawEllipse(220, 260, 60, 20);
    }
    
    void QPaintWidget::updatePixmap()
    {
        (offset >= 810) ? offset = 0 : offset+=5;
        qDebug() << offset;
        repaint();
    }
    
    QPaintWidget::~QPaintWidget()
    {
    
    }


    qpaintwidget.h:
    #ifndef QPAINTWIDGET_H
    #define QPAINTWIDGET_H
    
    #include <QWidget>
    #include <QTimer>
    
    class QPaintWidget : public QWidget
    {
        Q_OBJECT
    
        int offset;
        QTimer *paintTimer;
    protected:
        void paintEvent(QPaintEvent *);
    private slots:
        void updatePixmap();
    public:
        QPaintWidget(QWidget *parent = 0);
        ~QPaintWidget();
    };
    
    #endif // QPAINTWIDGET_H


    И несколько советов:
    1. Во-первых, никогда не используйте sleep() или Sleep() (в Windows) в программах на Qt. Так как при вызове этой функции замораживается основной thread, в котором как раз и происходит рендеринг GUI. Отсюда тормоза программы и пр.

    2. Никогда не начинайте названия своих классов с буквы Q или q, так как тогда их легко спутать с теми классами, которые входят в библиотеку. Если вам так нужен префикс в имени класса, используйте заглавную C (Class), т. е. ваш класс должен иметь название CPaintWidget или просто PaintWidget.
    Ответ написан
  • Как вырезать расширение файла?

    EXL
    @EXL
    Энтузиаст
    #!/bin/bash
    OLDIFS=$IFS
    string=$1
    IFS='.'
    string_array=($string)
    len=$(( ${#string_array[@]} - 1 ))
    IFS=$OLDIFS
    echo ${string_array[$len]}


    exl@exl-Lenovo-G560e:~/SandBox > ./token.sh ..log.f
    f
    exl@exl-Lenovo-G560e:~/SandBox > ./token.sh .log.ccc
    ccc
    exl@exl-Lenovo-G560e:~/SandBox > ./token.sh log.qwerty
    qwerty
    Ответ написан
    Комментировать
  • Как установить и запустить wayland с weston'ом?

    EXL
    @EXL
    Энтузиаст
    Есть такой шуточный проект-дистрибутив, - RebeccaBlackOS, который создан специально для того, чтобы можно было удовлетворить любопытство и потрогать Wayland/Weston. Представляет собой LiveCD, который можно запустить через виртуалку. Одна из последних версий датируется 2014-02-24. Еще есть мартовская версия 2014-03-01, правда, каталог, в котором она лежит почему-то датируется 2013-ым годом, хотя образы - 2014-ым.

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

    Как сейчас обстоит ситуация - не знаю. Если будете пробовать - обязательно отпишитесь о работоспособности.

    Кстати, есть ещё Maui project с DE, написанным на Qt5, тоже использует Wayland/Weston. Правда, попробовать этот дистрибутив мне так пока и не довелось. Удачи!
    Ответ написан
  • Как исправить проблему компиляции GCC 4.8.2?

    EXL
    @EXL
    Энтузиаст
    Не уверен, но возможно эта страница вам поможет.
    Ответ написан
    Комментировать