PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : dyn. Erzeugen von widgets unter QT ...



TheDodger
12-02-2002, 16:08
Moin!

Also, ich hab da im Moment ein kleines Verständigungsproblem.

Zur Vorgeschichte ... ich portiere gerade ein uralt KDE1-Programm nach QT3.
Da dieses alte Prg. viele alte, nicht mehr aktuelle Aufrufe aus der alten KDE1 lib nutzt, ist das ganze dann auch reichlich Mühsam ...

Das Prg. erzeugt beim start mehrere Widgets, die im laufe des prg. mittels hide() / show() ein- bzw. ausgeblendet werden.
Innerhalt dieser Widgets sollen dann Daten dargestellt werden. (so das original ...)

Die Widgets werden auch wunderbar erzeugt, doch schon das ein- bzw. ausblenden klappt nicht, geschweige denn das darstellen von Daten innerhalb der Widgets. :(

Etwas code:




// im constructor des 'hauptfensters'
// die ( QWidget ) sind logischerweise im headerfile als public deklariert!
( QWidget *) infoShell = new QWidget( splitter, "infoShell" );
( QWidget *)_fileInfo = new FileInfoWidget( infoShell, "_fileInfo );

[...]

// zugriff auf die dyn. Widgets

_fileInfo->hide(); // funktioniert nicht

[...]

// in FileInfoWidget-Class enthaltene Funktion aufrufen
// funktioniert auch
_fileInfo->setText( text );

_fileInfo->show(); // funktioniert auch nicht

[...]


hat jemand eine Idee, wie ich das machen könnte?

Beim KDE Control-Center werden ja auch z. Laufzeit Widgets erzeugt und dargestellt ... also muß das doch irgenwie funktionieren.

Boron
12-02-2002, 18:02
'Ne Frage vorneweg:

Steht im header?

QWidget infoShell;
FileInfoWidget _fileInfo;

Dann ist es totaler Blödsinn im Konstruktor einen Cast auf jeweils QWidget* zu machen. Das kann ja gar nicht funktionieren.

Mein Vorschlag für das Header-File:

QWidget* infoShell;
FileInfoWidget* _fileInfo;

Für die cpp-Datei:

infoShell = new QWidget( splitter, "infoShell" );
_fileInfo = new FileInfoWidget( infoShell, "_fileInfo );

Gruss Boron

TheDodger
12-02-2002, 21:35
Original geschrieben von Boron
'Ne Frage vorneweg:

Steht im header?

QWidget infoShell;
FileInfoWidget _fileInfo;

Dann ist es totaler Blödsinn im Konstruktor einen Cast auf jeweils QWidget* zu machen. Das kann ja gar nicht funktionieren.


nein, im header steht


QWidget * infoshell;
FileInfoShell *_fileInfo;


ich habe ja im kommentar schon geschrieben, daß (QWidget*) im Header deklariert ist ... okay, habe das vielleicht etwas blöd hingeschrieben ...



Mein Vorschlag für das Header-File:

QWidget* infoShell;
FileInfoWidget* _fileInfo;

Für die cpp-Datei:

infoShell = new QWidget( splitter, "infoShell" );
_fileInfo = new FileInfoWidget( infoShell, "_fileInfo );



so steht es ja auch da drin.

anda_skoa
26-02-2002, 16:05
Hi Dodger!

Probier mal QWidgetStack:
http://doc.trolltech.com/3.0/qwidgetstack.html

Vielleicht gehts damit leichter.

Ciao,
_