Russian Qt Forum

Qt => Общие вопросы => Тема начата: kuzulis от Июль 13, 2010, 08:17



Название: Применение Qt::HANDLE
Отправлено: kuzulis от Июль 13, 2010, 08:17
Доброго времени.

Нужно объединить в одном классе дескрипторы устройства так, чтобы они "нормально" работали в разных ОС.

Например для Windows типом дескриптора является тип HANDLE, в Linux тип int.
Я нашел в Qt описание типа Qt::HANDLE
Цитировать
typedef Qt::HANDLE

Platform-specific handle type for system objects. This is equivalent to void * on Windows and Mac OS X, and embedded Linux, and to unsigned long on X11.

вроде все-бы ничего, но смущает это:
Цитировать
and to unsigned long on X11
т.е. как я понял типом данных в Linux в этом случае будет unsigned long, а мне нужен int !

Боюсь, как бы не случилось "страшное" ! :)

Т.е. класс должен выглядеть как-то так:
Код:
class MyClass : public QObject
{
    O_OBJECT

public:
    MyClass(Qt::HANDLE descriptor, QObject *parent = 0);
    ...
}

т.е. нужно чтобы переменная descriptor "правильно" скармливалась в разных осях. Это возможно?


Название: Re: Применение Qt::HANDLE
Отправлено: BRE от Июль 13, 2010, 08:47
Определи сам:
Код
C++ (Qt)
#if defined( Q_OS_WIN32 )
typedef HANDLE DEV_HANDLE;
#elif defined( Q_OS_LINUX )
typedef int DEV_HANDLE;
#elif ...
 


Название: Re: Применение Qt::HANDLE
Отправлено: kuzulis от Июль 13, 2010, 09:38
Да, конечно, это так, но для этого придется подключать к примеру <qt_windows.h> . Но ты (или не ты) в других ранних топиках говорил что это не ТРУ т.к. открываются тогда стопицот тыщ дефайнов Win32API. Т.к. в идеале при программировании с использованием Qt всё это должно быть скрыто. :)