On Thu, Dec 06, 2001 at 12:37:35PM +0100, Andre Schulze wrote:
Am Wed den 05 Dec 2001 um 07:16:55AM +0100 schrieb Tobias Koenig:
On Wed, Dec 05, 2001 at 08:13:43PM +0100, Andre Schulze wrote:
Moin,
ich habe hier mal ne Frage an die Qt Experten: warum sind Widgets nicht sichtbar, die als Objekt definiert wurden, wohingegen mittels des new Operators erzeugte Widgets sichtbar sind?
<schnipp>
Innerhalb der Klasse habe ich auch this anstatt 0 (==top_level) verwendet.
Nun ich wollte die Liste nicht mit Code überschwemmen, in der o.g. Klasse QteMUA sieht es also wie folgt aus:
QteMUA::QteMUA( QWidget *parent, const char *name ) : QWidget( parent, name ) { // als Objekt definiert: // this ist parent (FALSE sagt lediglich, dass es readonly ist) QComboBox boxFolders(FALSE,this,"Folders");
Wenn du ein QWidget so definierst, wird es auf dem Stack abgelegt. Wenn der Code des Konstruktors nun abgelaufen ist, werden ja alle Objekte vom Stack gelöscht => die QComboBox gleich mit...
// so würde es angezeigt werden (wenn man unten dann // boxFolders.(methode) durch boxFolders->(methode) ersetzen // würde natürlich
//boxFolders = new QComboBox ( FALSE, this, "Folders" ); boxFolders.setGeometry(0,0,80,20); boxFolders.insertItem ( (QString) "Inbox", Inbox ); boxFolders.show();
So bleibt es aber dunkel.
Da nach Ablauf des Konstruktors ja kein Objekt mehr da ist => es wird keins Angezeigt. Normalerweise definiert man _alle_ sichtbaren (und innerhalb der Klasse benötigten) Widgets im Headerfile der Klasse im 'private' Abschnitt
class QteMUA : public QWidget { public: QteMUA(QWidget *parent = 0, const char *name = 0); ~QteMUA();
private: QComboBox *boxFolders; QButton *myButton; };
QteMUA::QteMUA(QWidget *parent, const char *name) : QWidget(parent, name) { boxFolders = new QComboBox(false, this, "Folders"); Q_CHECK_PTR(boxFolders); boxFolders->setGeometry(0, 0, 80, 20); boxFolders->insertItem(i18n("Inbox"), inbox); }
So liegen alle sichtbaren Objekte auf dem Heap und stehen wärend der ganzen RunTime des Programms zur Verfügung
Ciao, Tobias