QSerialDevice Problem

Verschiedenes zu Qt
Antworten
Muckl
Beiträge: 23
Registriert: 12. April 2011 15:21

QSerialDevice Problem

Beitrag von Muckl »

Hallo zusammen,
habe probleme mit QSerialDevice. Ich bekomme die Bibliotheke nicht eingelade. Ich habe mit eine Version von Nokia "qserialdevice-qserialdevice-0.4.0" geladen und auch eine von SVN qserialdevice-0.2.0. Habe bei beiden versucht die die .pro datei zu laden und zu erstellen und hierbei habe ich schon Fehlermeldungen erhalten. Bei der SVN habe ich 6 Build-Probleme, jeweil "call of overloaded 'QString(int)' is ambiguous. Problem war hier die abstractserial.cpp.
Selbst wenn ich dann die libqserialdevice.a erstellt bekomme, wie geht es dann weiter? Die Doku hört da auf.

Vielen Dank!


Malte
Muckl
Beiträge: 23
Registriert: 12. April 2011 15:21

Beitrag von Muckl »

Hallo,
so, ein bsichen weiter bin ich. habe die Ntddser.h aus dem aus dem Internet gezogen. Jetzt sind nur noch zwei fehlermeldungen da.

Error 1 error C2027: use of undefined type 'SerialDeviceEnumeratorPrivate' c:\Thesis\qserialdevice-qserialdevice-master\qserialdevice-qserialdevice\src\build\moc\moc_serialdeviceenumerator.cpp 77

Error 2 error C2227: left of '->_q_processWatcher' must point to class/struct/union/generic type c:\Thesis\qserialdevice-qserialdevice-master\qserialdevice-qserialdevice\src\build\moc\moc_serialdeviceenumerator.cpp 77

und das hier ist die Methode die er nciht mag:

int SerialDeviceEnumerator::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QObject::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
switch (_id) {
case 0: hasChanged((*reinterpret_cast< const QStringList(*)>(_a[1]))); break;
case 1: d_func()->_q_processWatcher(); break;
default: ;
}
_id -= 2;
}
return _id;
}


wobei Zeile 77 dies ist:


case 1: d_func()->_q_processWatcher(); break;





aber warum nur?

gruß,
Malte
kuzulis
Beiträge: 25
Registriert: 30. September 2009 14:55
Wohnort: Russland, Brjansk
Kontaktdaten:

Beitrag von kuzulis »

Hallo.

"Ntddser.h" - eine Header-Datei des Compilers. Zum Beispiel in MinGW von dort standardmäßig. Aber in verschiedenen Versionen von MSVC, kann er sein oder auch nicht. Daher für MSVC in "nativeserialengine_win.cpp" verwendet Makros ersetzen "ntddser.h".

Daher ist jede Bibliothek des Compilers (und MinGW MSVC und) ohne Fehler kompiliert!
Ich verstehe nicht, woher hast du diese Fehler!

Laden Sie die neueste Version und überprüfen:

https://gitorious.org/qserialdevice/qse ... all/master

PS: Entschuldigen schlechte Übersetzung.
----
Grüße, Denis.
Muckl
Beiträge: 23
Registriert: 12. April 2011 15:21

Beitrag von Muckl »

Ja, sehr gut, damit ging es. Danke!
Benutze das QT AddIn für VisualStudio 08. Ist es richtig die .a Datei nun in das Verzeichnis C:\Qt\4.7.2\lib zu kopieren und dann in Visual Studio unter Project/Property/linker/input/additional Dependencies die Datei hinzu zu fügen? Beim QT Creater fügt man den Pfand ja in die .pro datei mit ein, aber sowas gibt es bei VS ja nciht.

gruß,
Malte
kuzulis
Beiträge: 25
Registriert: 30. September 2009 14:55
Wohnort: Russland, Brjansk
Kontaktdaten:

Beitrag von kuzulis »

Benutze das QT AddIn für VisualStudio 08. Ist es richtig die .a Datei nun in das Verzeichnis C:\Qt\4.7.2\lib zu kopieren und dann in Visual Studio unter Project/Property/linker/input/additional Dependencies die Datei hinzu zu fügen?
Ich weiß nicht, ich weiß nicht verwenden MSVC.

Um die Bibliothek in Ihrem Projekt verwenden, müssen Sie die Header-Dateien haben: abstractserial.h und / oder serialdeviceenumerator.h sowie eine binäre Datei hinzugefügt: libqserialdevice(d).a(dll).

Sie können diese Dateien zu kopieren, wo sie Sie in das Projekt benötigen. Zum Beispiel, Schlagzeilen in der \include, und die Bibliothek \lib in Ihrem Projekt.

Siehe letzten Beitrag hier:
http://qt-apps.org/content/show.php?content=112039

Grüße, Denis.
Muckl
Beiträge: 23
Registriert: 12. April 2011 15:21

Beitrag von Muckl »

Hallo nochmal,
verwende jetzt qextserialport 1.0, daten von der Seriellen Schnittstelle kann ich jetzt lesen. Die readyRead() Funktion funktioniert aber nicht so wie gewünscht. Wollte dies nun mit der qextserialport 1.2 versuchen. Problem ist, dass ich bei der 1.2 Version nicht auf die Methode readData() zugreifen kann, da diese als "protected" in der Win_qextserialport.h deklariert ist. Bei der 1.0 Version war sie noch als "public" deklariert. Meine Serielle Schnittstelle erstelle ich als Instanz von QextSerialPort. Und ich denke dass QextSerialPort von Win_Qextserialport erbt. Den Aufruf der Methode readData() mache ich also mit

Code: Alles auswählen

 SerielleSchnittstelle->readData(); 
. Aber wie kann ich dann auf eine protected Methode zugreifen?

gruß,

Muckl
Antworten