Seite 1 von 1

[gelöst] verschiedene GUI-Dateien mit gleichem Namen laden

Verfasst: 7. Mai 2010 09:05
von Cabo
Hallo,

ich schreibe ein Programm, welches es ermöglicht, verschiedene Geräte (die an den Computer angeschlossen werden können) zu konfigurieren etc. Als Beispiel nehme ich hier mal Mikrokontroller.

Es gibt also einen Ordner "MCPlugins" in dem wiederum für jeden Mikrokontroller ein Unterordner ist. In diesem Ordner befinden sich Konfigurationsdateien und eine GUI, welche dem Benutzer erlaubt gerätspezifische Einstellungen vorzunehmen (d.h. jede GUI sieht hier anders aus, und es kann nicht immer die gleiche verwendet werden!!!).

Ich hatte mir das so vorgestellt, dass die Auswahl durch eine QComboBox stattfindet und dann durch Klicken eines QPushButton die passende GUI geladen wird. Damit man später einfacher neue Geräte integrieren kann, wollte ich die GUIs immer gleich nennen, und sie nur aus unterschiedlichen Ordnern laden lassen. Bis jetzt werden mir die verschiedenen GUIs auch angezeigt, allerdings reagieren sie nicht auf die zugehörigen Slots (als ob er die .cpp Dateien nicht mit lädt). Gelöst habe ich das ganze mit dem QUiLoader:

Code: Alles auswählen

QUiLoader loader;
QComboBox cB_selSco; //ComboBox
QString selected_scope;

/* 'path' enthält den Pfad des Plugins-Ordners */

    /* Wenn Pfad existiert, lade UI */
    if(dir.exists(path)){
        QFile file(path_scopeplugin);
        file.open(QIODevice::ReadOnly);

        QWidget *ui_widget = loader.load(&file, NULL);
        file.close();
        ui_widget->show();
    }
Ich hoffe mir kann jemand diesbezüglich helfen,oder hat eine andere Idee, wie man dieses Problem lösen kann.

Ich arbeite übrigens auf Windows XP und Qt Creator 1.3.1, basiered auf Qt 4.6.2.

Danke,
Cabo

edit:
Vielen Dank, ich habe das Problem nun einfach durch Vererbung gelöst.

Re: verschiedene GUI-Dateien mit gleichem Namen laden

Verfasst: 7. Mai 2010 09:12
von franzf
Cabo hat geschrieben:Bis jetzt werden mir die verschiedenen GUIs auch angezeigt, allerdings reagieren sie nicht auf die zugehörigen Slots (als ob er die .cpp Dateien nicht mit lädt).
Und wie soll das gehen? .cpp-Dateien werden kompiliert, die kann man nicht plaintext zur Laufzeit laden, wie das vllt. mit python oder JavaScript (also Scriptsprachen) geht. Du musst das ordentlich in eine DLL packen, und die dann laden.
Denn in einem .ui allein steht ja noch kein Code, darin ist nur die Information zum Erstellen der Gui enthalten.

Verfasst: 7. Mai 2010 09:14
von Cabo
oh mist,... da stand ich ja total auf dem schlauch *peinlich*
vielen dank schon mal!
ich werde das gleich versuchen umzusetzen und melde mich dann noch mal mit eventuellen erfolgen

Verfasst: 7. Mai 2010 09:42
von RHBaum
Was du suchst klingt stark nach Plugins mit eigener GUI Schnittstelle.

Ist nicht unbedingt nen triviales thema ...

Ciao ....

Verfasst: 7. Mai 2010 10:02
von Cabo
danke für deine antwort.

muss man bei dieser plugin mit gui schnittstellen sache was besonderes beachten, oder kennst du vielleicht ein gutes tutorial oder sowas in der art? es klingt auf jeden fall so, als könnte ich das gebrauchen wenn die sache mit meiner dll nachher nicht funktioniert oder einfach als gedankenanregung