Как стать автором
Обновить

Пишем для KDE4: Solid

Время на прочтение4 мин
Количество просмотров1K
Прочитав хабратопик Столпы KDE4. Solid., я решил проверить, а так ли удобен этот фреймворк для разработчиков и что он собственно умеет?

Теория


Большинство классов solid, доступных программисту для разработки, содержаться в kdelibs и включают в себя:

Solid::AcAdapter Работа с AC адаптерами
Solid::AudioInterface Работа с звуковыми картами
Solid::Battery Работа с батареями
Solid::Block Работа с блочными устройствами
Solid::Button Работа со специфичными кнопками (Lid, Power, Sleep )
Solid::Camera Работа с цифровыми камерами
Solid::Device Позволяет приложениям узнать, доступно то или иное оборудование в системе.
Solid::DeviceInterface Базовый класс для всех интерфейсов устройств
Solid::DeviceNotifier Оповещение системы о всех имеющихся и подключаемых во время работы устройствах
Solid::DvbInterface Работа с DVB (Digital Video Broadcast) устройствами
Solid::GenericInterface Общий интерфейс для работы с устройствами на прямую
Solid::NetworkInterface Работа с сетевыми интерфейсами
Solid::Networking::Notifier Оповещение системы о изменении состояния сети (Unknown, Unconnected, Disconnecting, Connecting, Connected)
Solid::PowerManagement::Notifier Оповещение системы о состоянии питания
Solid::OpticalDisc Работа с оптическими носителями
Solid::OpticalDrive Работа с оптическими приводами
Solid::PortableMediaPlayer Работа с переносными плеерами
Solid::Predicate Позволяет узнать принадлежит ли устройство к тому или иному типу
Solid::Processor Работа с процессором
Solid::SerialInterface Работа с устройствами с последовательным интерфейсом
Solid::StorageAccess Работа с разделами устройствах хранения информации
Solid::StorageDrive Работа с устройствами хранения информации
Solid::StorageVolume Работа со всему устройсвами, которые могут содержать информацию
Solid::Video Работа с устройствами обработки видео

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

Практика


Попробуем написать простенький пример. в котором используем пару возможностей Solid.

Для начала экспериментов, необходимо доустановить в свою систему необходимые dev пакеты. Командуем
$ sudo aptitude install automoc cmake kdelibs5-dev
и ждём минут пять пока скачается и установится всё необходимое.

Приложение будет состоять из трёх файлов и реализовывать две функции:
1) Вывод списка всех доступных в системе устройств при старте
2) Слежение за всеми вновь подключёнными в систему устройствами.

app.h:
#include <solid/devicenotifier.h>
#include <solid/device.h>

#include <QApplication.h>
#include <QDebug.h>

class App : public QApplication
{
Q_OBJECT

public:
App(int args, char **argv);
virtual ~App();
private slots:
void deviceAdded(const QString &udi);
void deviceRemoved(const QString &udi);
};


* This source code was highlighted with Source Code Highlighter.

app.cpp:
#include "app.h"

App::App( int args, char **argv )
: QApplication(args, argv)
{
//Выводим список всех доступных устройств
qDebug() << "===== All available devices =====";
foreach (const Solid::Device &device, Solid::Device::allDevices())
{
qDebug() << device.udi().toLatin1().constData();
}

//Начинаем слежение за всеми подключаемыми в систему устройствами
qDebug() << "\n===== Start monitoring for new =====";
Solid::DeviceNotifier *notifier = Solid::DeviceNotifier::instance ();
connect(notifier, SIGNAL(deviceAdded (const QString &)), this, SLOT(deviceAdded(QString const&)));
connect(notifier, SIGNAL(deviceRemoved(QString const&)), this, SLOT(deviceRemoved(QString const&)));
}

void App::deviceAdded(QString const&udi)
{
qDebug() << "Added" << udi.toLatin1().constData();
}

void App::deviceRemoved(QString const&udi)
{
qDebug() << "Removed" << udi.toLatin1().constData();
}

App::~App()
{
//TODO
}


* This source code was highlighted with Source Code Highlighter.

main.cpp:
#include "app.h"

int main(int args, char **argv)
{

App app( args, argv );

return app.exec();
}


* This source code was highlighted with Source Code Highlighter.

CMakeLists.txt:
project(solid)

find_package(KDE4 REQUIRED)

include_directories( ${KDE4_INCLUDES} )

set(mySources main.cpp app.h app.cpp)

kde4_add_executable(solid ${mySources})

target_link_libraries(solid ${KDE4_KDEUI_LIBS} ${KDE4_KPARTS_LIBS} )

install(TARGETS solid DESTINATION bin)


* This source code was highlighted with Source Code Highlighter.

Сохраняем всё это в каком-либо каталоге и выполняем по очереди:
cmake .
make
./solid


* This source code was highlighted with Source Code Highlighter.

Если всё собралось правильно, после запуска мы увидим список всех устройств в системе.

Теперь попробуем подключить флешку или мп3 плеер в usb разъём и увидим что-то вроде:
Added /org/freedesktop/Hal/devices/usb_device_58f_6387_51ZT24OY_4
Added /org/freedesktop/Hal/devices/usb_device_58f_6387_51ZT24OY_4_if0
Added /org/freedesktop/Hal/devices/usb_device_58f_6387_51ZT24OY_4_usbraw
Added /org/freedesktop/Hal/devices/usb_device_58f_6387_51ZT24OY_4_if0_scsi_host
Added /org/freedesktop/Hal/devices/usb_device_58f_6387_51ZT24OY_4_if0_scsi_host_scsi_device_lun0
Added /org/freedesktop/Hal/devices/usb_device_58f_6387_51ZT24OY_4_if0_scsi_host_scsi_device_lun0_scsi_generic
Added /org/freedesktop/Hal/devices/storage_serial_JetFlash_TS2GJFV60_51ZT24OY_0_0
Added /org/freedesktop/Hal/devices/volume_uuid_4979_CC88


* This source code was highlighted with Source Code Highlighter.

Отключаем наше устройство и видим:
Removed /org/freedesktop/Hal/devices/usb_device_58f_6387_51ZT24OY_4_if0_scsi_host_scsi_device_lun0_scsi_generic
Removed /org/freedesktop/Hal/devices/volume_uuid_4979_CC88
Removed /org/freedesktop/Hal/devices/storage_serial_JetFlash_TS2GJFV60_51ZT24OY_0_0
Removed /org/freedesktop/Hal/devices/usb_device_58f_6387_51ZT24OY_4_if0_scsi_host_scsi_device_lun0
Removed /org/freedesktop/Hal/devices/usb_device_58f_6387_51ZT24OY_4_if0_scsi_host
Removed /org/freedesktop/Hal/devices/usb_device_58f_6387_51ZT24OY_4_if0
Removed /org/freedesktop/Hal/devices/usb_device_58f_6387_51ZT24OY_4_usbraw


* This source code was highlighted with Source Code Highlighter.

Всё это означает, что у нас всё получилось, solid работает и использует в качестве своего бэкэнда ни что иное, как HAL.

Для подготовки заметки использовался материал сайта api.kde.org. зайдя на который можно найти исчерпывающее количество информации по Solid, включая туториалы, документацию по API и т.п.
Теги:
Хабы:
Всего голосов 29: ↑25 и ↓4+21
Комментарии17

Публикации

Истории

Ближайшие события

19 сентября
CDI Conf 2024
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн