Seite 1 von 1

Einlesen UI-File tut nicht

Verfasst: 15. März 2009 13:50
von bigenkmw
Hallo,
ich versuche meine ersten Schritte in Qt4 (Qt3 habe ich einige Jahre gamacht, dann aber längere Zeit nix mehr in Qt programmiert). Habe ein Miniprogrämmle geschrieben, das auch kompiliert. Man kann es auch ausführen. Leider ist das Fenster leer... Das ui-File habe ich per Designer erstellt. Alles unter Linux.

Ich wette es ist nur eine Winzigkeit, aber ich finde sie nicht. Kann mir jemand helfen?

Code: Alles auswählen

## demo4.pro -------------------------------------------------------------------
CONFIG       += uitools

RESOURCES     = demo4.qrc

HEADERS      += demo4.h
SOURCES      += demo4.cpp
SOURCES      += main.cpp
## demo4.qrc -------------------------------------------------------------------
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="/">
    <file>demo4.ui</file>
</qresource>
</RCC>
## demo4.ui --------------------------------------------------------------------
<ui version="4.0" >
 <class>Demo4</class>
 <widget class="QMainWindow" name="Demo4" >
  <property name="geometry" >
... usw.
## main.cpp --------------------------------------------------------------------
#include <QApplication>
#include "demo4.h"
int main(int argc, char *argv[])
{
     Q_INIT_RESOURCE(demo4);
     QApplication app(argc, argv);
     Demo4 demo4;
     demo4.show();
     return app.exec();
}
## demo4.h ---------------------------------------------------------------------
#include <QObject>
#include <QMainWindow>

 class QLabel;
 class QPushButton;

 class Demo4 : public QMainWindow
 {
     Q_OBJECT

 public:
     Demo4();

 private slots:

 private:
 };
## demo4.cpp -------------------------------------------------------------------

#include <QtUiTools>
#include <QtGui>

#include "demo4.h"

Demo4::Demo4( )
{
     QUiLoader loader;

     QFile file(":/demo4.ui");
     file.open(QFile::ReadOnly);
     QWidget *formWidget = loader.load(&file, this);
     file.close();

     QMetaObject::connectSlotsByName(this);

     setWindowTitle(tr("Demo4 Fensterle"));
}
## EOF -------------------------------------------------------------------------
[/code][/quote]

hui - was machst du denn da ....

Verfasst: 21. März 2009 19:53
von st0ff
Hi,
also mal ganz ehrlich, ich hab das Gefühl, du gehst den falschen weg...

Bei mir sieht das in der Regel so aus:
main.cpp

Code: Alles auswählen

#include <QApplication>
#include <QTranslator>
#include <QMessageBox>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
      Q_INIT_RESOURCE(linguas);
      QApplication app(argc, argv);
	
	QTranslator transe;
	if(transe.load(QLocale::system().name(),":/Linguas"))
		app.installTranslator(&transe);
	else
		QMessageBox::warning(0,"Load error:","Translation could not be loaded: RESOURCE:/Linguas/" + QLocale::system().name());

      mainwindow * mw = new mainwindow();
      mw->show();
      return app.exec();
}
mainwindow.h

Code: Alles auswählen

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "ui_MainWindow.h"

class mainwindow: public QMainWindow, private Ui::MainWindow {
Q_OBJECT
public:
    mainwindow(QWidget *parent = 0);

[...der Rest, hier erstmal unwichtig...]

};
#endif
mainwindow.cpp

Code: Alles auswählen

#include <QtGui>
#include "mainwindow.h"

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

[...und wieder der weitere code...]
Und dies funktioniert dann richtig, wenn die qmake (Version 4) Datei so aussieht: Projekt.pro

Code: Alles auswählen

TEMPLATE = app
CONFIG += thread qt
SOURCES += main.cpp mainwindow.cpp
HEADERS += mainwindow.h
RESOURCES += linguas.qrc
TRANSLATIONS += lang_de.ts lang_en.ts
FORMS += MainWindow.ui
TARGET = Projekt
Dann reichen eigentlich die folg. Schritte zum compilieren:

Code: Alles auswählen

cd <Projektverzeichnis>
qmake
lupdate lang_de.ts lang_en.ts
... die Language-Files mit dem Linguist bearbeiten ...
lrelease
make
... Aber der Vollständigkeit halber noch die "linguas.qrc":

Code: Alles auswählen

<RCC>
    <qresource prefix="/Linguas" >
        <file alias="en">lang_en.qm</file>
        <file alias="de">lang_de.qm</file>
    </qresource>
</RCC>
Ich hoffe, das hilft Dir erstmal weiter ...

Beste Grüße,
St0fF

...

Verfasst: 21. März 2009 19:55
von st0ff
denn schliesslich macht eigentlich qmake alles für dich. Nach dem qmake-run gibts das gute Makefile, von diesem aus laufen dann uic und moc und alles wird für dich vorbereitet. Lediglich das mit den Übersetzungen ist a bissi umständlicher.

Re: Einlesen UI-File tut nicht

Verfasst: 21. März 2009 20:04
von franzf
bigenkmw hat geschrieben:

Code: Alles auswählen

## demo4.cpp -------------------------------------------------------------------

#include <QtUiTools>
#include <QtGui>

#include "demo4.h"

Demo4::Demo4( )
{
     QUiLoader loader;

     QFile file(":/demo4.ui");
     file.open(QFile::ReadOnly);
     QWidget *formWidget = loader.load(&file, this);
     file.close();

     QMetaObject::connectSlotsByName(this);

     setWindowTitle(tr("Demo4 Fensterle"));
}
## EOF -------------------------------------------------------------------------
Du holst dir hier zwar das Widget aus dem UI, aber ein wichtiger Schritt fehlt noch:
Es in ein Layout zu packen oder (da Demo4 ein QMainWindow ist) setCentralWidget( uiWidget );
Ansonsten passiert halt einfach nix.

Wenn du aber auf das dynamische Laden der UI während der Ausführung (so machst du das ja grad) verzichten kannst, solltest du vllt. an das Einbinden der Ui während dem Kompilieren denken (der vorher geschilderte Weg via setupUi()). Steht auch alles in der Doku.