Qtproject в реестре что это

QSettings: Просматриваем, создаем и удаляем записи в реестре Windows

Для работы с реестром Windows можно воспользоваться программой regedit . Но может потребоваться реализовать более специализированный инструмент. Одним из возможных подходов является создание Qt-приложения, основанного на QSettings . Этим мы и займемся.

В первую очередь обеспечим возможность просмотра содержимого реестра:

registry-demo-start-thumbnail

Далее обеспечим возможность добавления новых значений в открытую ветку (с помощью кнопки Создать ):

registry-demo-create-thumbnail

registry-demo-added-thumbnail

Наше приложение действительно сможет влиять на систему (поэтому будьте осторожны при тестировании примера):

environment-variables

Также мы сможем удалять записи, которые нам не нужны (по нажатию кнопки Удалить ):

registry-demo-selected-thumbnail

Предупреждение: приложение является демонстрационным, поэтому для упрощения реализации часть ошибок заведомо не обрабатывается и игнорируется. Например, кнопки Создать и Удалить действуют всегда, поэтому следите, чтобы состояние интерфейса отвечало логике действия (для создания — выделена ветка реестра, а для удаления — выбрано какое-нибудь значение), иначе в худшем случае это может привести к проблемам в работе системы.

Реализация

Заголовочный файл mainwidget.h :

Файл реализации mainwidget.cpp :

Просмотр реестра мы основываем на классе QSettings с его функциями-членами для доступа к группам ( childGroups() ) и к ключам для заданной группы ( childKeys() ). При этом QSettings инициализируется следующим образом:

Поскольку реестр содержит очень много записей, мы не можем загрузить и отображать его целиком. Поэтому приходится идти на небольшую хитрость — загружаем древовидную структуру реестра не больше, чем на один уровень ниже видимого:

При этом нам приходится обрабатывать сигнал разворачивания элемента дерева:

Поиск пути в реестре для некоторого элемента дерева происходит с помощью вспомогательной функции:

Обратите внимание, что вложенные элементы в пути реестра разделяются символами "\\" (например, HKEY_CURRENT_USER\\Environment ).

Чтение значений происходит при щелчке на элементе в дереве:

Обратите внимание, что для упрощения мы считываем все значения без учета их типа, как текст. Это может привести к появлению загадочных надписей в интерфейсе программы на неизвестных человечеству языках. Именно по этой причине я не добавил функцию редактирования значений в нашу программу.

Создание новой записи сводится к добавлению значения в текущую ветку реестра:

Запрос данных у пользователя осуществляем с помощью модального диалогового окна, описание которого здесь мы опускаем.

Удаление значения из реестра сводится реализуется не сложнее, чем добавление:

Почему я люблю Qt и вы все тоже должны его любить


После суток жизни поста я начал замечать утечку кармы, так что заранее прошу прощение за возможно недопустимый стиль изложения в статье и субъективизм

Последнее время я не мог не обратить внимание на популярность темы Qt на хабрике, но тем не менее, в комментах продолжают встречаться люди, которые говорят откровенно лживые и непонятные вещи. Этим постом я хотел развеять малость заблуждений о Qt и рассказать, почему же ты должен пересесть со своих Java/Obj-C/.NET на мягкий и пушистый Qt.

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

Вешч №1. С++ API

Ни для никого не секрет, что у Qt очень удобное API, а конкретнее говоря, модуль qtbase содержит достаточное количество классов для большинства повседневных задач (Qt — это больше, чем GUI фреймворк, лол). Я уже говорил об обертках STL-ных контейнеров в своей статье трехгодичной давности — тыцк. Классы для работы со строками, отладочный вывод, и много-много чего, так же included.

Стоит сказать, что у Qt также есть модули для удобной работы с XML, базами данных (с интеграцией вкусной-превкусной кьютешной системой MVC), OpenGL, аудио/видео-работы (Phonon), сетевого программирования, WebKit2. Для больниства задач, которые стоят перед среднестатистическим проектом — этой кухни хватает в 90% случаев, а с модулями редко случаются з*ебы.

С учетом моей любви к C++, я очень и очень сильно доволен тем, какую поддержку различных нетривиальных вещей Qt представляет на кросс-платформенном уровне. Пару раз приходилось разруливать особо непонятные моменты, но это такое.

Вешч №2. Qt Quick

Qt Quick — это мегасмачный подход к созданию графического пользовательского интерфейса. Используя декларативный язык QML (угадайте, где его придумали, лол), похожий на JavaScript, можно добиться высокой производительности при прототипировании интерфейса в приложениях любой сложности. А самое забавное, что при таком ходе дел, с прототипированием интерфейса может справиться даже дизайнер, который знает синтаксис JavaScript. Это все были бы пустые слова, если бы я не показал вам пример функционального кода (больше можно найти на Qt Project — тамц).

image

В этом коде нету ни строчки С++ и он нормально работает. Годно, не так ли? Я себя даже волшебником от этого почуствовал — проще в магазин за хлебом сходить, чем приложение вот такое склепать. Тем не менее, в сложных приложениях не хватает одного QML и мы объединяем его с С++. Об этом шла речь в многих статьях хаба Qt Software — например, тамц.

Вешч №3. Сообщество

Ну вот мы и дошли до приятного момента. Если говорить о мне, то я работаю с Qt относительно мало — всего 5 лет. Qt проводит ежегодные мероприятия — Qt Developer Days и Qt Contributors’ Summit. Я был на каждом из них по одному разу, в прошлом году, и мне очень понравилось — уровень подготовки высокий, а впечателения доставляют. Мне также приходилось общаться с «ветеранами» Qt — людьми, которые посещали саммит на протяжении 10 лет. Представляю, насколько круто на своих глазах видеть рост такого проекта и быть в эпицентре всей разработки — просто смачненько.

К новичкам эти люди очень терпимы и относятся хорошо, мне было очень легко и прятно навести контакты с такими замечательными людьми. На Qt Project есть форумы, где каждый желающий может получить ответ на волнующий его вопрос. Забавно, но девнет действительно очень живой и там реально отвечают на вопросы, возникающие, в процессе познания Qt.

Вешч №4. Открытый исходный код и code review

Сорец кьюта открыто разрабатывается в основном, компаниями Digia (комм. поддержка +), KDAB, ICS и энтузиастами-разработчиками. Хостится все это дело на Gitorious — тадамц. Чтобы внести свою лепту в развитие проекта, нужно пройти строгую проверку кода — автоматизированную (соблюдения стиля кода, о котором я уже писал ранее — птссс) и человеческую — твой код будут смотреть бородатые дяди, которые не доверяют тебе и будут искать в твоем коде бэкдоры. Все это достаточно сложный процесс (заморочки с Git / ревизии на Review Board) и я наверное напишу об этом статью на днях.

У меня, к слову, есть пару коммитов в дереве qtbase, так что можете спрашивать в лс — попробую ответить на вопросы.

Вешч №5. Динамика развития проекта

Qt разрабатывается уже много лет, с конца 90-х. За это время его коммерческой версией уже успели наиграться такие компании, как Trolltech и Nokia, а сейчас этим занимается Digia. Но одно можно точно сказать, проект живет и процветает. Еще несколько лет дизайн все писали на виджетах (С++ классы, все до единого основанные на QWidget), а сегодня его может сделать и маленький ребенок. Думаю, не стоит говорить, что параллельно с ним активно развивается мошнейшая вешч — Qt Creator, который сегодня радует не только Qt программистов!

^ классненький Qt Creator, в котором можно творить чудеса и тебе за это ничего не будет.

К сожалению, у меня нету строгих чисел, но говорят, что код каждый день оптимизируется, а codebase тщательно наращивается — добавляются новые фичи и исправляются старые баги (в этом то я успел убедиться уже много раз). Все это очень годно и не может не радовать.

К тому же, сейчас идет активное развитие платформ iOS, Android, Windows Phone, уже сейчас можно собирать под них программы!

Стартовал Qt Project: Qt теперь официально развивается сообществом

Фрагмент сайта Qt Project

Компания Nokia объявила об официальном запуске Qt Project, что ознаменовало окончательную передачу проекта популярного графического тулкита Qt в руки Open Source-сообществу.

Ещё в мае представители Qt Labs из Nokia предупреждали, что в компании планируют «сделать ставку» на Open Source-сообщество при подготовке следующего крупного релиза Qt — 5.0. Теперь это обещание выполнено: запущен сайт qt-project.org, который и станет отправной точкой для формирования и взаимодействия сообщества вокруг Qt.

В анонсе проекта говорится о его «истинной открытости»: «Qt Project — это подлинный Open Source-проект. Мы приглашаем всех участвовать [в судьбе проекта] и помогать улучшать Qt как продукт». Там же сообщается, что теперь при разработке Qt не будет никакого разделения на «представителей Nokia и всех остальных»: взаимодействие участников Qt Project будет проходить в лучших традициях других Open Source-проектов.

На данный момент на сайте Qt Project представлен большой список инициатив, связанных с Qt, в которых может поучаствовать любой желающий. Там же можно увидеть цитаты представителей The Linux Foundation и KDE, высказывающихся в поддержку созданию Qt Project. Пока не все ресурсы Qt перенесены на новый сайт, но это вопрос времени.

Пример работы с реестром Windows

Нужно сделать программу, которая показывает список программ из автозапуска! Просто даже не знаю с чего начать работу с реестром, изучаю Qt буквально пару недель, прошу помочь, напишите для примера не сложную програмку, которая показывает работу с реестром, заранее спасибо!

Желательно, что-то типа такого:

Класс TRegistry для работы с реестром Windows
Есть класс TRegistry для работы с реестром операционной системы Windows. И тут же возникает вопрос.

тонкости работы с реестром
есть програма которая по нажатию кнопки творит вот такое чудо void __fastcall.

DLL, функции работы с реестром
Недавно познакомился с DLL. Начал делать дллку. В ней должна быть функция работающая с реестром.

как это не прискорбно, но QSettings не умеет полноценно работать с реестром, где то в нете когда-то нарыл класс для полноценной работы с реестром в Win естественно он юзает WinAPI и ни о какой кроссплатформенности не может идти речи, хотя все что касается реестра не может быть кроссплатформенно

JulyRegApi — класс на Qt для удобной работы с реестром Windows.

Примечания:
Все функции являются статическими и можно использовать их не создавая переменных класса.
В функцию regWrite можно передавать значения в типах: QByteArray, QString, Int.
Тип HKEY_LIST может принимать значения:
HK_CLASSES_ROOT
HK_CURRENT_USER
HK_LOCAL_MACHINE
HK_USERS
HK_CURRENT_CONFIG

Функции для получения и записи значений реестра:
static QString regReadString(HKEY_LIST,QString path, QString val); //Фукнция для чтения REG_SZ текстовой строки возвращающая QString
static QByteArray regReadArray(HKEY_LIST,QString path, QString val); //Фукнция для чтения REG_BINARY массивов возвращающая QByteArray
static int regReadInt(HKEY_LIST,QString path, QString val); //Фукнция для чтения REG_DWORD возвращающая Int

static bool regWrite(HKEY_LIST,QString path, QString val, QString data, bool createSubKeys=true); //Функция для записи значения из QString в REG_SZ, при флаге createSubKeys=true создаются все ветки если конечного ключа не существует
static bool regWrite(HKEY_LIST,QString path, QString val, QByteArray data, bool createSubKeys=true); //Функция для записи значения из QByteArray в REG_BINARY, флаг createSubKeys делает то что уже написано выше
static bool regWrite(HKEY_LIST,QString path, QString val, int data, bool createSubKeys=true); //Функция для записи значения из int в REG_DWORD, флаг createSubKeys делает то что уже написано выше

static bool regRemove(HKEY_LIST,QString path); //Удаление ключа path со всеми значениями. Удаление не произойдет если существуют подветки
static bool regRemove(HKEY_LIST,QString path, QString val); // Удаление значения val из ветки path
если удалось удалить ветку то обе функции возвратят true если нет то false

Системные функции:
static QString shellUserName(); //Возвращает Имя текущего пользователя
static QString shellComputerName(); //Возвращает Имя компьютера
static QString shellUserTemp(); //Возвращает путь временной папки пользователя
static QString shellSystemTemp(); //Возвращает системный путь временной папки
static QString shellWindowsDir(); //Возвращает путь к папке Windows

static void shellSetTempDir(QString); //Изменяет путь временной папки пользователя и системы на указанную

Пример записи в реестр:
JulyRegApi::regWrite(JulyRegApi::HK_LOCAL_MACHINE, "SOFTWARE\\GigaSOFT\\SomeSoft","SomeKeyName",QStri ng("Text writed there"));
в результате будет записано текст "Text writed there" в ключ "SomeKeyName" который находиться в ветке "HKEY_LOCAL_MACHINE\SOFTWARE\GigaSOFT\SomeSoft "
такой же формат записи в реестр для этой функции типов QByteArray и Int

Пример чтения из реестра:
QString myValue;
myValue=JulyRegApi::regReadString(JulyRegApi::HK_L OCAL_MACHINE,"SOFTWARE\\GigaSOFT\\SomeSoft", "SomeKeyName");
в результате myValue примет значение ключа "SomeKeyName" из ветки "SOFTWARE\\GigaSOFT\\SomeSoft"
если перед этим выполнить запись из примера выше то myValue=="Text writed there";
Формат параметров для функций regReadArray и regReadInt такой же как и в этом примере regReadString но возвращают они другой тип QByteArray и Int соответственно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *