Monika90 |
» 2015-12-04 18:11:41 |
|
Kefirek Temat założony przez niniejszego użytkownika |
» 2015-12-04 18:26:48 Używam 5. dzięki za info bo właśnie szukałem w dokumentacji i nie mogłem znaleźć. |
|
Kefirek Temat założony przez niniejszego użytkownika |
» 2015-12-04 19:11:53 Niestety nie bardzo wiem co podstawić za parametry funkcji. Poza tym po włączeniu prototypu funkcji do klasy Form oraz zdefiniowaniu jej w form.cpp tak jak poniżej: bool Form::nativeEvent( const QByteArray & eventType, void * message, long * result ) { return true; }
program się zawiesza.Nie bardzo wiem co przypisać do eventType, próbowałem tak: eventType = QEvent::Move;
ale nie ma efektu. Poza tym nie wiem co przypisać do result, no i trzeci parametr funkcji jest funkcją ??????. Krótko mówiąc pogmatwało się trochę. |
|
Monika90 |
» 2015-12-04 19:37:22 To dobrze, to znaczy że funkcja działa. eventType = QEvent::Move; |
Nie możesz nic do tego przypisać, bo to przecież ma atrybut const. U mnie dział coś takiego, dla klasy dziedziczącej z QFrame #include <QFrame> #ifdef _WIN32 #include <windows.h> #endif
class Native : public QFrame { Q_OBJECT bool nativeEvent( const QByteArray &, void * message, long * result ) override { #ifdef _WIN32 auto & msg = * static_cast < const MSG *>( message ); if( msg.message == WM_MOVING ) { auto & rect = * reinterpret_cast < RECT *>( msg.lParam ); rect.left = x(); rect.top = y(); rect.right = x() + frameGeometry().width(); rect.bottom = y() + frameGeometry().height(); * result = true; return true; } #endif return false; } };
|
|
Kefirek Temat założony przez niniejszego użytkownika |
» 2015-12-04 19:55:20 Dzięki. Spróbuje Twój kod zgrać z moim programem. |
|
Kefirek Temat założony przez niniejszego użytkownika |
» 2015-12-04 20:47:54 ....a u mnie nie bardzo to idzie. Mianowicie w klasie Form która dziedziczy po QWidget umieściłem prototyp funkcji, a w form.cpp jej definicję: bool Form::nativeEvent( const QByteArray &, void * message, long * result ) override { #ifdef _WIN32 auto & msg = * static_cast < const MSG *>( message ); if( msg.message == WM_MOVING ) { auto & rect = * reinterpret_cast < RECT *>( msg.lParam ); rect.left = x(); rect.top = y(); rect.right = x() + Form::window()->geometry().width(); rect.bottom = y() + Form::window()->geometry().height(); * result = true; return true; } #endif return false; }
Nagłówki załączyłem dyrektywą #include i niestety wywala dużo błędów: C:\U sers\S.Piernikowski\Desktop\QFiles\Magnus\form.cpp: 41: blad: virt - specifiers in 'nativeEvent' not allowed outside a class definition bool Form::nativeEvent( const QByteArray &, void * message, long * result ) override ^
C:\U sers\S.Piernikowski\Desktop\QFiles\Magnus\form.cpp : 44 : blad : invalid initialization of reference of type 'int&' from expression of type 'const MSG {aka const tagMSG}' auto & msg = * static_cast < const MSG *>( message ); ^
C:\U sers\S.Piernikowski\Desktop\QFiles\Magnus\form.cpp: 45: blad: request for member 'message' in 'msg', which is of non - class type 'int' if( msg.message == WM_MOVING ) ^
C:\U sers\S.Piernikowski\Desktop\QFiles\Magnus\form.cpp : 47 : blad : request for member 'lParam' in 'msg' , which is of non - class type 'int' auto & rect = * reinterpret_cast < RECT *>( msg.lParam );
^
C:\U sers\S.Piernikowski\Desktop\QFiles\Magnus\form.cpp: 48: blad: request for member 'left' in 'rect', which is of non - class type 'int' rect.left = x(); ^ C:\U sers\S.Piernikowski\Desktop\QFiles\Magnus\form.cpp: 49: blad: request for member 'top' in 'rect', which is of non - class type 'int' rect.top = y(); ^ C:\U sers\S.Piernikowski\Desktop\QFiles\Magnus\form.cpp: 50: blad: request for member 'right' in 'rect', which is of non - class type 'int' rect.right = x() + Form::window()->geometry().width(); ^ C:\U sers\S.Piernikowski\Desktop\QFiles\Magnus\form.cpp: 51: blad: request for member 'bottom' in 'rect', which is of non - class type 'int' rect.bottom = y() + Form::window()->geometry().height(); ^
|
|
Monika90 |
» 2015-12-04 21:08:28 override powinno być użyte tylko wewnątrz definicji klasy, tzn. class Form { bool nativeEvent( const QByteArray &, void * message, long * result ) override; };
bool Form::nativeEvent( const QByteArray &, void * message, long * result ) { return false; }
Żeby używać auto musisz włączyć C++11 (lub lepiej C++14), ewentualnie możesz zastąpić deklaracje z auto, tym: const MSG & msg = * static_cast < MSG *>( message );
i tym: RECT & rect = * reinterpret_cast < RECT *>( msg.lParam );
|
|
Kefirek Temat założony przez niniejszego użytkownika |
» 2015-12-04 21:45:51 Miło mi zakomunikować, że wszystko OK - miałem jeszcze jeden błąd po poprawkach. Mianowicie override nie mogło być poza ciałem klasy Form, także wyrzuciłem definicję funkcji z form.cpp do klasy Form. Monika90 jak zwykle się sprawdzasz w najtrudniejszych tematach za to BIG szacun dla Twojej wiedzy i zaangażowania. Pozdrawiam i jeszcze raz dziękuję za pomoc. PS te 90 na końcu Twojego nicka to rok urodzenia??? |
|
1 « 2 » 3 |