Seite 1 von 1

[gelöst] Multiple Inheritance Approach

Verfasst: 27. September 2006 16:05
von archon
Hallo

Ich darf also endlich mit qt4 programmieren und bin gerade dabei ein Grundgerüst für die Applikation mit MainWindow zu schaffen. Ich hab die GUI im Designer erstellt, komm im Moment mit der Anbindung nicht weiter.

Hier meine Dateien:

Code: Alles auswählen

#include "ui_mainform.h"

#include <QApplication.h>
#include <QSplashscreen.h> 
#include <QMainWindow.h>
#include <QPixmap.h>

int main( int argc, char ** argv )
{
	QApplication app(argc, argv);

	QPixmap pixmap("images/splash.png"); 
   	QSplashScreen *splash = new QSplashScreen(pixmap); 
   	splash->show(); 

    QMainWindow *window = new QMainWindow;
    Ui::MainForm ui;
    ui.setupUi(window);

    window->show();


	splash->finish(window); 
    
   	delete splash;

    return app.exec();
}
und mainform.h

Code: Alles auswählen

#include <QtGui/QMainWindow>
#include "ui_mainform.h"

class MainForm : public QMainWindow, private Ui::MainForm
{
        Q_OBJECT

    public:
        MainForm(QWidget *parent = 0);
        
    protected: 

	private slots: 

	private: 
};

MainForm::MainForm(QWidget *parent)
        : QMainWindow(parent)
{
        setupUi(this);

		logTextEdit->append("Hallo");
        
}
dabei möcht ich einfach das Hallo im Text Feld ausgeben. Der Gui und Splash kommt aber der TextEdit zeigt nix an. Was mach ich falsch? Der Compiler (Mingw) sagt alles ok.

Verfasst: 28. September 2006 07:08
von macman
Hätte dir beim debuggen aufffallen müssen. Du rufst dein Window auf, im Konstruktor wird das setupUi gemacht, dann schreibst Du dein 'Hallo' und dann rufst Du in main nochmal setupUi auf, wodurch dein 'Hallo' wieder überpinselt wird.

Verfasst: 28. September 2006 09:43
von archon
Hi!

Jo danke schon mal, aber ein auskommentieren von setupUi im mainform.h bringt auch nix. Ich hab mir das mit dem zweimaligen setup auch schon gedacht aber blick noch nicht ganz durch was da eigentlich im main.cpp geschieht mit

Code: Alles auswählen

    Ui::MainForm ui; 
    ui.setupUi(window); 

?!

Verfasst: 28. September 2006 11:00
von macman
Das ändert ja nichts daran, das Du erst den Text schreibst und ihn dann wieder übermalst. Wenn ein setupUi auskommentieren, dann das in main.

Verfasst: 28. September 2006 11:01
von archon
auch schon gemacht-> gui wird nicht angezeigt (leeres kleines fenster)

Verfasst: 28. September 2006 13:13
von archon
Wenn ich

Code: Alles auswählen

Ui::MainForm ui;
ui.setupUi(window);

lineEdit->setText("hallo");
in main hinzufüge geht es natürlich aber nicht eben über die standard MIA Klasse wies im Tutorial bei Trolltech beschrieben ist.
Irgendetwas stimmt noch mit der Vererbung nicht...aber was?

Verfasst: 28. September 2006 14:00
von archon
So klappt es nun endlich: ein MainWindow (erstellt im Designer) im (bequemen) Multiple Inheritance Approach:

main.cpp:

Code: Alles auswählen

#include "ui_mainform.h"
#include "mainform.h"

#include <QApplication.h>
#include <QMainWindow.h>

int main( int argc, char ** argv )
{
    QApplication app(argc, argv);

    MainForm *window = new MainForm;
    window->show();
    return app.exec();
}
mainform.h:

Code: Alles auswählen

#ifndef MAINFORM_H_
#define MAINFORM_H_

#include "ui_mainform.h"

class MainForm : public QMainWindow, private Ui::MainForm
{
        Q_OBJECT

    public:
         MainForm(QWidget *parent = 0);
        ~MainForm(){};
    protected: 

    private slots: 

    private:
        Ui::MainForm ui;

};



#endif /*MAINFORM_H_*/
mainform.cpp

Code: Alles auswählen

#include "mainform.h"

#include <QMainWindow.h>

MainForm::MainForm(QWidget *parent)
        : QMainWindow(parent)

{
	
        setupUi(this);
        lineEdit->setText("Hurzlpurzl");
		
        //letz fetz
}