рдпрд╣рд╛рдБ рдХрд╣реАрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ Qt5 рдореЗрдВ рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреЛрд╕реНрдЯ рдереАред рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореМрдЬреВрджрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЪреАрдЬреЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реА рд╣реИрдВ? рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ Qt4 рдХреЗ рд╕рд╛рде рд╕реНрд░реЛрдд рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП рдЕрдкрдиреА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ Qt5 рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗ, рдореЗрд░рд╛ GUI рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдФрд░ рдпрд╣ рдирд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдорд╛рдирдХ рдХреНрдпреВрдЯреА рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдПрдХ рдЫреЛрдЯреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╡рд┐рдЧреЗрдЯреНрд╕ рдЕрдм рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪрд▓рд┐рдП рдЗрд╕реЗ Qt4 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдХрд░рддреЗ рд╣реИрдВ - рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ qmake рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ (* .pro | *ред .Pri):
greaterThan(QT_MAJOR_VERSION, 4) { QT += widgets DEFINES += HAVE_QT5 }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдм рд╕реЗ, рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрдк рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХрд╣реАрдВ рднреА #ifdef HAVE_QT5 рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ Qt5- рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред Ifdef рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдкреНрд░рднрд╛рд╡ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ precompiled рд╢реАрд░реНрд╖рдХ рдмрдирд╛рдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
#define HAVE_QT5 (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
рдФрд░ рдлрд┐рд░, рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдЬрд╛ рд░рд╣реА рд╣реИред рдЗрд╕ рдмрд╛рд░, рдХрд╛рд░рдг рд▓рд╛рдкрддрд╛ Q_WS_ * рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред Q_WS_WIN рдФрд░ Q_WS_MAC рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдорд╢рдГ Q_OS_WIN рдФрд░ Q_OS_MAC рдореЗрдВ рдмрджрд▓ рджреЗрдВред рд▓реЗрдХрд┐рди Q_WS_X11 рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рдЕрдХреНрд╕рд░, Q_WS_X11 рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдХ рдУрдПрд╕ (X) рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдпреВрдирд┐рдХреНрд╕ рдЬреИрд╕реА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╕рдВрдХреЗрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЛрдб рдХреЗ рддрд╣рдд рдЬреЛ X11 рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рдмрд╛рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ рдХреБрдЫ рдЕрдиреНрдп рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рдо рд╕рд┐рд░реНрдл Q_WS_X11 рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ Qt рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЗ рдЕрднреА рднреА рдЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ) рдФрд░ рдЗрд╕реЗ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ:
unix:!mac:DEFINES += HAVE_X11
рдЖрдЧреЗ рдмрдврд╝реЛред рдореЗрд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛рдлреА рдкреБрд░рд╛рдирд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рдЕрдкреНрд░рдЪрд▓рд┐рдд рдХрдХреНрд╖рд╛рдПрдВ рдпрд╛ рдХреНрд▓рд╛рд╕ рдореЗрдердб рдпрд╛ рдРрд╕реА рдХреЛрдИ рднреА рдЪреАрдЬ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рд╣реА Qt5 рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ рдпрд╛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдлрд┐рд░ рдирд╣реАрдВ рдЬрд╛рддреАред рдЬреЛ рдХреБрдЫ
рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣
Qt5 рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рд╣реА рдкреНрд░рд▓реЗрдЦрди рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдмрджрд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдкрд╡рд╛рдж рд╣реИрдВ рдХрд┐ рдореИрдВ рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛ред рдпрджрд┐ рдкреБрд░рд╛рдиреА рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рдЙрдирдХреЗ рддрд░реАрдХреЗ Qt5 рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдирд╣реАрдВ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпреЗ рд╕рдВрднрд╡рддрдГ Qt3 рдХреЗ рдЕрд╡рд╢реЗрд╖ рд╣реИрдВ рдФрд░
Qt4 рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЬреЛ рдореИрдВ рдЗрд╕рдХреЗ рдкрд╛рд░ рдЖрдпрд╛ рдерд╛, рд╡рд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ: QIconSet, QMenuItem (qt3ред рдХреНрд░рдорд╢рдГ QIcon рдФрд░ QAction рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ), QAbstractItemModel :: reset (use startResResModel / endResetModel), QKeySequence рдЕрдм int (рд╣рдо) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ (рдПрд▓рдУрдпреВ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдорд╛рд░реЗ рддрддреНрд╡реЛрдВ (рд▓реВрдк) рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдирдИ QUrlQuery рд╡рд░реНрдЧ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛, Qt :: рдПрд╕реНрдХреЗрдк рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ (рдЗрд╕рдХреЗ рдЗрдирд▓рд╛рдЗрди рд░реИрдкрд░ рдУрд╡рд░ Qt :: рдПрд╕реНрдХреЗрдк рдФрд░ QString :: toHtmlEscaped), qInstallMsgHandler (qInstallMessageHandler) ...
рдЕрдЧрд▓рд╛
QPA рд╣реИ ред рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдХреНрдпреВрдЯреА рд╕реЗ рдЗрд╕ рдЪреАрдЬ рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рд╡рд░реНрдЧ QX11Info рдЧрд╛рдпрдм рд╣реЛ рдЧрдпрд╛, рдФрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдХреБрдЫ рднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ред рд╡рд╣ рдЧрд╛рдпрдм рд╣реЛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рдЬрд╝рд▓реАрдм рд╕реЗ рд╕рдЦреНрддреА рд╕реЗ рдмрдВрдзрд╛ рд╣реБрдЖ рдерд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, QPlatformNativeInterface Qt5 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЬреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрд▓реНрдж рд╣реА рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЕрдм рдХреЗрд╡рд▓ рдПрдХ рдирд┐рдЬреА рд╡рд░реНрдЧ / рд╣реЗрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдПрдХ рддреНрд╡рд░рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ, рдЬреЛ рдЕрднреА рднреА рдЬрд╝рд▓реАрдм рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдореИрдВрдиреЗ рдЕрднреА QX11Info рдкрд░ рдПрдХ рдЖрд╡рд░рдг рд▓рд┐рдЦрд╛ рд╣реИ, рдЬреЛ Qt5 рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕рдХрд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:
x11info.h
#ifndef X11INFO_H #define X11INFO_H typedef struct _XDisplay Display; class X11Info { static Display *_display; public: static Display* display(); static unsigned long appRootWindow(int screen = -1); }; #endif
x11info.cpp
#include "x11info.h" #ifdef HAVE_QT5 # include <X11/Xlib.h> # include <QtGlobal> #else # include <QX11Info> #endif Display* X11Info::display() { #ifdef HAVE_QT5 if (!_display) { _display = XOpenDisplay(NULL); } return _display; #else return QX11Info::display(); #endif } unsigned long X11Info::appRootWindow(int screen) { #ifdef HAVE_QT5 return screen == -1? XDefaultRootWindow(display()) : XRootWindowOfScreen(XScreenOfDisplay(display(), screen)); #else return QX11Info::appRootWindow(screen); #endif } Display* X11Info::_display = 0;
рдореИрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддрд╛рд░реНрдХрд┐рдХ рдирд┐рд╖реНрдард╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рддрдХ рдХреЛрдб рдХрд╛ рдЕрднреА рддрдХ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдореЗрд░реЗ рдкрд╛рд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП QApplication :: x11EventFilter рдЬреИрд╕реЗ рджреЗрд╢реА рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рднреА рд╣реИрдВред Qt5 рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ QAbstractNativeEventFilter рдФрд░ xcb рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдХреБрдЫ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (Xlib рдпрд╣рд╛рдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ QPA рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ)ред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЗрди рджреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдПрдкреАрдЖрдИ рдХреА рд╕рдорд╛рдирддрд╛ рдХреЗ рдХрд╛рд░рдг xcb рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореИрдиреБрдЕрд▓ рдкрд░ рд╕реНрдЯреЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреЛрдЯ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛ред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдлреА рддреБрдЪреНрдЫ рдерд╛: рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рд╡рд░реНрдЧ рдореЗрдВ, x11EventFilter рдХреЗ рдмрдЧрд▓ рдореЗрдВ, рдЗрд╕рдиреЗ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдЬреЛрдбрд╝рд╛, рдЬрд┐рд╕реЗ xcbEventFilter рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрдИ ifdefs рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдзрд┐ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ QAbstractNativeEventFilter рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛ рдФрд░ рдЗрд╕рдореЗрдВ рд╕реЗ рдореИрдВрдиреЗ рд╕рднреА xcb рдШрдЯрдирд╛рдУрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╣рдорд╛рд░реА рд╡рд┐рдзрд┐ рдореЗрдВ рдкреБрдирдГ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛:
#ifdef HAVE_X11 # ifdef HAVE_QT5 class XcbEventFiter : public QAbstractNativeEventFilter { MyApplication *app; public: XcbEventFiter(MyApplication *app) : app(app) {} virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE { if (eventType == "xcb_generic_event_t") { return app->xcbEventFilter(message); } return false; } }; # endif
рдпрджрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд┐рдВрдЧрд▓рдЯрди рдХрд╕реНрдЯрдо рдХреЛ nativeEventFilter рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЧреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ред Qt5 рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрд▓рдЧ, рдЕрд╕рдВрдЧрдд рддрд░реАрдХреЗ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рднреА рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрдкреНрд░рд┐рдп рдмреНрд░реЗрдХрдбрд╛рдЙрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рдЕрдм рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рд╕рд╛рдЭрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ рдкреВрд░реЗ рдкреНрд▓рдЧрдЗрди рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдХ рдХреНрдпреВрдЯреА рдкреНрд▓рдЧрдЗрди рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рдХреЛрдИ рдореЗрдЯрд╛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдпрд╣ рдкреНрд▓рдЧрдЗрди рд╣реИ рд╕рдВрдЧрддред
рдпрд╣рд╛рдБ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА), рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдорд░рдореНрдордд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕рднреА рдирд┐рд░реНрдпрд╛рдд рдореИрдХреНрд░реЛ рдЗрд╕ рддрд░рд╣ рд╕рд╢рд░реНрдд рд╣реИрдВ:
#ifndef HAVE_QT5 Q_EXPORT_PLUGIN2(myplugin, MyPlugin); #endif
рдкреНрд▓рдЧрдЗрди рд╡рд░реНрдЧ рдореЗрдВ рднреА, рд╣рдо рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдПрдХ рдирдпрд╛ Qt5- рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореИрдХреНрд░реЛ Q_PLUGIN_METADATA рдХрд╣реАрдВ рднреА Q_INTERFACES рдХреЗ рдкрд╛рд╕ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди Q_OBJECT рдХреЗ рдмрд╛рдж:
#ifdef HAVE_QT5 Q_PLUGIN_METADATA(IID "tld.domain.Project.MyPluginInterface" FILE "myplugin.json") #endif
File рднрд╛рдЧ
"myplugin.json" рдХреЗрд╡рд▓ рддрднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрдм рд╣рдореЗрдВ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ "tld.domain.Project.MyPluginInterface" рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП, рдпрд╣ Q_DECLARE_INTERFACE рдХреА рддрд░рд╣ рд╣реА рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛: рдкреНрд▓рдЧрдЗрди рд╕рдВрд╕реНрдХрд░рдг, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдиреНрдпреВрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдкреНрд░рд╛рдердорд┐рдХрддрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд▓рдЧрдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП HAVE_QT5 рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рд╛рде рдЬрд╛рджреВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛, рдЬрд╛рджреВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рддреНрд╡рд░рд┐рдд рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ,
#if QT_VERSION> = 0x050000 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд╕реНрдЯреИрдЯрд┐рдХ рдкреНрд▓рдЧ рдЗрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдХреЙрд▓ рдХреЛ Q_IMPORT_PLUGIN рдореИрдХреНрд░реЛрдЬрд╝ рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рд╡реЗ рдЕрдм рдкреНрд▓рдЧрдЗрди рд╢реНрд░реЗрдгреА рдХреЗ рдирд╛рдо рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ, рди рдХрд┐ Q_EXPORT_PLUGIN2 рдореЗрдВ рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреНрдпрд╛ рдерд╛ред
рддреЛ, рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ! рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛, рд╕реЗрдЧрдлреЙрд▓реНрдЯред рдореЗрд░рд╛ рдХреЛрдб QMetaType :: Void == 0 рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди Qt5 рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рд╣реИред рдУрдХреЗ, рдлрд┐рдХреНрд╕, рд░рди рдПрдВрдб рд╕реЗрдЧрдлреЙрд▓реНрдЯ рдлрд┐рд░ рд╕реЗ рд░рдиред рдЗрд╕ рдмрд╛рд░, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП Q_DECLARE_METATYPE рджреВрд╕рд░реЗ рдореЗрдВ рд╣реИред рдХрд┐рд╕ рдХрд╛рд░рдг рд╕реЗ, рдЙрддреНрддрд░рд╛рд░реНрджреНрдз, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрдм рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рдерд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░реЛрдбрд╝рд╛ рдХреНрдпрд╛ рдерд╛, рдореИрдВрдиреЗ рдмрд╕ Q_DECLARE_METATYPE рдХреЛ рдЙрдирдХреА рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред рдФрд░ рдлрд┐рд░ рд╕реЗ рд▓реЙрдиреНрдЪ - рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдмрд╣реБрдд рдХрд╛рдо рд╣реИред Xcb рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдЕрднреА рднреА рднрд░рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд рдореЗрд░реЗ X11Info рд╡рд░реНрдЧ рдХреЛ xcb рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдХрд┐ рдкреИрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд╛рде рд╣реА рд╕рд╛рде рдкреИрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ, рд╕рдмрд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ!
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдиреАрдЪреЗ рдХреБрдЫ рд▓рд┐рдВрдХ рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬрд┐рдирд╕реЗ рдореБрдЭреЗ Qt5 рдкрд╣реЗрд▓реА рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реА:
www.kdab.com/porting-from-qt-4-to-qt-5xcb.freedesktop.org/tutorialqt-project.org/doc/qt-5.0/qtwidgets/tools-plugandpaint.htmlgoogle.comрдЕрджреНрдпрддрди: Qt5 рдореЗрдВ рдирд┐рд╖рд┐рджреНрдз рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдмреИрд╕рд╛рдЦреА