Ускорение компиляции Qt проекта в IDE Qt Creator

Posted on 2017-06-21 12:52:03

Если вы работаете над сколь мало серьезным проектом на С++, то вы сталкивались с мучительно долгой компиляцией, даже если не учитывать полную пересборку проекта. Может возникнуть момент, когда сам процесс разработки становится затруднительным из - за длительной компиляции. Например, внесли какието изменения в исходный код, добавили небольшой класс, запустили процесс компиляции, что бы протестировать изменения - можно идти пить чай, ибо ждать нужно минут пять. Устранить эту печаль призванна данная статья.

Оказывается, в 2017 - му году, если не предпринять специально меры, по умолчанию при компиляции используется один поток! Долой многоядерные процессоры ... . К счастью распараллелить компиляции С++ проектов в Qt Creator достаточно просто. Есть несколько путей это сделать, например редактированием pro файла с добавлением флагов, но самый простой и самый эффективный, судя по бенчмаркам, это использование утилиты JOM. И так, качаем архив утилиты https://wiki.qt.io/Jom , распаковываем и кидаем содержимое в папку Qt5.9mingw53_32/bin. Далее открываем Qt Creator, настраиваем сборку конкретного проекьа как показано ниже:

Qt Creator JOM parallel compilation

Собственно, на  этапе make build and clean нужно указать путь к утилите JOM. Касательно величины ускорения, в текущем состоянии проекта UnoSDR, полная компиляция на дефолтных настройках занимала 11 мин 51 сек. С утилитой jom - 3 мин 40 сек. Процессор ноутбучный 4 ядра. Выводы делайте сами. 

Сворачивание Qt Qml приложения в System Tray

Posted on 2017-06-21 12:27:21

В новой версии Qt 5.9.0 появилась поддержка system tray. До этого приходилось использовать QSystemTrayIcon из состава виджетов. Теперь все намного проще. Ниже небольшой пример. При нажатии на кнопку закрытия приложения, приложение будет светнуто в system tray - в общем стандартное поведение. Так же, при запуске должно появится системное уведомление.

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.Layouts 1.3
import Qt.labs.platform 1.0

ApplicationWindow {
    property string appTitle: "Example"

    id: window
    visible: true
    width: 640
    height: 480
    title: qsTr(appTitle)

    SystemTrayIcon {
        visible: true
        iconSource: "qrc:/favicon.ico"
        tooltip: appTitle

        menu: Menu {
            MenuItem {
                text: qsTr("Quit")
                onTriggered: Qt.quit()
            }
        }

        onMessageClicked: console.log("Message clicked")
        Component.onCompleted: {
            console.log(supportsMessages)
            showMessage("Message title", "Something important came up. Click this to know more.")
        }

        onActivated: {
            console.log(reason)
            if(reason !== SystemTrayIcon.Context) {
                window.show()
                window.raise()
                window.requestActivate()
            }
        }
    }

    onClosing: {
        close.accepted = false
        window.hide()
    }

}

Ну и теперь пару ложек дегтя. В функции вывода системного сообщения есть параметр - время показа этого сообщения, но в windows 10 его значение не влияет. Так же в qml api нет возможности задать тип системного сообщения. Например, в той же windows 10 по умолчанию тип - INFO, и его ни как не поменять. А если нужно сообщить пользователю об ошибке? И последнее, в сигнале Activated параметр reason undefined. Из - за этого мне не удалось реализовать сценарий, если пользователь кликает левой кнопкой мыши по иконке приложения в системном трее, приложение разворачивается, правой - открывается контекстное меню.

Релиз Qt 5.9

Posted on 2017-06-08 12:19:19

Работая над проектом стал замечать в выдаче Google документацию на Qt5.9. Оказалось, что 31 мая подоспела новая версия фреймворка Qt 5.9.0, всего после полугода от предыдущей Qt5.8.0, что достаточно быстро. 

На следующий же день я установил новую версию. Изменений не так много, главным образом затронуты кэширование qml, производительноть qml, исправление багов.

Вот касательно багов я бы и хотел поговорить. Странно работает QML Slider и RangeSlider. При изменении положения ползунка мышкой сначала ползунок перемещается вслед за мышкой, но потом залипает и не реагирует на мышку. Нужно опьять кликнуть на ползунок, и ситуация повторяется. Конечно, в любом продукте есть баги. Но подобные, на примере выше описанного, которые лежат на поверхности, приписывают продукту ярлык сырости, недоверия. Ведь я потратил время на установку новой версии, работу с ним, что бы выяснить, что Qt 5.9 мне не подходит, и придется использовать старую Qt 5.8.0. Раньше, когда выходила новая версия фреймворка я с уверенностью ее ставил, теперь же после очередного обновления мне нужно ждать пока исправят элементарные баги?

Почему Qt 5.9 вышла так быстро? Почему нет Qt 5.8.1, Qt 5.8.2, как было с Qt 5.7.0 и Qt 5.7.1? Неужели в компании завелись "'эффективные менеджеры", которые думают, что пользователям нужны большие циферки и обновления чуть ли не каждый месяц?

Формирование двухполярного напряжения питания из однополярного

Posted on 2017-05-26 21:37:36

Зачастую для работы многих схем требуется двухполярное напряжение питания - однополярное с средней точкой. Т.е. когда за "Землю" принимается не минусовой вывод источника питания, а ровно половина выходного напряжения. Тогда получается относительно земли два напряжения +U и -U равной, по модулю величины.

Характерной особенностью правильного двухполярного источника питания является равные величины без знака +U и -U ВСЕГДА - если посмотреть двухлучевым осциллографом форму выходных напряжения, то пульсации сетевой частоты, а она всегда есть в реальном источнике питания, симметричны. Под влиянием недостаточной фильтрации пульсаций при увеличении +U, на столько же уменьшается и -U, для выполнения условия модуль(+U) = модуль(-U). После выше изложенного у вас закрался ответ на вопрос, зачем применяют двухполярные источники питания?

Ответ прост - для устранения влияния пульсаций питающего напряжения. Как бы мы не пытались спроектировать хороший фильтр с максимальныи КПД, сглаживающий пульсации после выпрямителя, например увеличением номиналов электролитических конденсаторов, применением активных фильтров на транзисторах, существуют устройства, для которых полученные значения уровня пульсаций все равно не приемлемы. Например приемники прямого преобразования, в состав которого входит усилитель низкой частоты с коэффициентом усиления ~ 100000, т.е. на его вход подается сигнал с уровнем ~ 1..10мкВ. 

Типичным потребителем двухполярного напряжения питания являются операционные усилители. Правда их можно включить в схему и из однополярным напряжением питания, но в этом случае теряются приемущества двухполярного. В любом даташите на ОУ можно найти параметр "Supply-voltage rejection ratio", значение которое находится в пределах обычно 80 .. 100 дБ. Выражает соотношение изменение напряжение питания к изменению напряжения на выходе ОУ, выраженное в децибелах. Проще говоря коэффициент подавления пульсаций напряжения питания. Коэффициент подавления пульсаций фильтра однополярного источника питания значительно ниже.

Собственно схема преобразования однополярного напряжения в двухполярное представлена ниже. Это один из возможных вариантов. Популярна так же схема с двумя диодными мостами и одной вторичной обмоткой трансформатора. Но в моем устройстве трансформатор вынесен из корпуса, и на вход подается уже выпрямленное напряжение, так что ...  

формирование двухполярного питания из однополярного

Транзисторы Q1 и Q2 BD139 BD140 следует заменить на другие с достаточным коэффициентом уситения по току h21э. Я применил BDX33 BDX34 дарлингтона с значением 750. Операционный усилитель можно применять практически любой. Например LM358. В данном случае я применил который валялся под рукой - NE5532. Он сдвоенный, как видно из схемы. Триммером RV1, который должен быть многооборотным, выставляем половину напряжения питания.

First Previous 1 2 3 4 5 6 7 8 9 10 11 12 Last