PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : KDE/qt neues Fenster in der App erzeugen(Settings Widget)



jonasge
01-04-2002, 20:27
Hallo Linux'er!

Ich habe gearde angefangen c++ in Verbindung mit KDE/qt zu programmieren.
Meine erste Applicatio läuft auch schon sehr gut.

Ich habe ein Menuleiste in mein Programm eingebunden, mit den Menüpunkten
File Settings Help.
Unter Settings ist ein Menüpunkt settings.
Doch jetzt komm ich nicht weiter.
Ich will jetzt, das wenn man den Menüpunkt settings aufruft, das ein neues
KDE fenster erzeugt wird, wo man ein paar sachen einstellen kann.
Doch ich habe jetzt schon so viele Dokus durchgelesen, doch ich bekomme es nicht
hin! :-(

ICH WILL EINFACH, wenn man SEttings aufruft, das ein neues KDE fenster erzeugt wird.
Wie mache ich das, wenn das neue Fenster in einer neuen .cc und .h Datei steht, wie erzeuge
ich überhaupt so ein Fenster, und wie übersetzte ich das dann mit den anderen 3 file ?
Und wie sage ich in meiner haupt C++ datei, wenn connection settings clicked, dann mach dies
neue Fenster auf??

Frage über Fragen, BITTE helft mir !!

thx und Gruss
Jonas

TheDodger
02-04-2002, 09:51
simple ...

Also, ich gehe jetzt nur von QT aus!
Meine Widgets erzeuge ich mit dem Designer und leite von den erzeugten UI-Klassen davon meine eigene Klassen ab.
(Mit etwas Handarbeit, ässt sich das wahrscheinlich auch mit der Hand auscoden, doch warum umständlich, wenn's so einfach ist.)

Diese Klasse kann man dann ganz normal aufrufen



uiNewWindow nWindow;
nWindow.show(); // oder exec() kommt drauf an, ob's modal sein soll, oder nicht

Alles in allem steht das allerdings wirklich ausführlich in der QT-Doku beschrieben.

jonasge
02-04-2002, 11:35
Das geht ALLES nicht!
Habe mir die Doku von qt druchgeschaut, kein erfolg, dann habe ich von bestehenden
Apps das angeschaut, auch kein Erfolg, so ein verdammter scheißdreck...
So ein Müll.
Gibt es nirgends eine gute Erklärung auf deutsch, die mir zeugt, wie ich mit einem
QPushButton ein neues Widget öffne ohne groß sachen drin, einfach nur EIN FENSTER!


Jonas

marcopi
02-04-2002, 15:32
hallo,

Dialog mit seperater Klasse:



void KMyApp::slotOpenDialog() //slot vom Menüpunkt settings
{
Dialog_Klassenname *dlg = new Dialog_Klassenname;
dlg->show();
}


Es gibt unter KDevelop ein KDE Anwendungs Tutorial (deutsch) ,dort gibt es ein Beispiel: Dialog erstellen und aufrufen.


marco

jonasge
02-04-2002, 22:54
Hallo,
also danke für eure Hilfe, obwohl sie doch nicht wirklich Hilfreich war.
Doch jetzt geht es.
Wenn ich jetzt meinem Dialog aufrufen, dann wird der in der Taskleiste anzeigt, und als Symbal so ein
X gemacht!
Wenn ich z.B. bei Quanta einem Dialog oeffne, dann wird dieser nicht in der Taskleiste angezeigt,
und das Hauptprogramm ist blockiert, so will ich das auch, wie mache ich das?
-----------------------------------------
Das ./compile Script:
#!/bin/bash
g++ -c -I/usr/include/kde -I/usr/include/qt -fno-rtti main.cc
moc jonas.h -o jonas.moc
moc updatedia.h -o updatedia.moc
g++ -c -I/usr/include/kde -I/usr/include/qt -fno-rtti jonas.cc
g++ -L/usr/lib -lkdeui -lkdecore -lqt -ldl -o jonas main.o jonas.o
rm *.moc
rm *.o
-------------------------
Die Main.cc
#include "jonas.h"
int main( int argc, char **argv )
{
KApplication a( argc, argv, "Jonas" );
JOnas *w = new JOnas();
w->setGeometry(100,100,300,300);
a.setMainWidget( w );
w->show();
return a.exec();
}
-----------------------------
Die Jonas.h:
#include <kapp.h>
#include <kmainwindow.h>
#include <qpushbutton.h>
#include <kmenubar.h>
#include <qpopupmenu.h>
#include <qlineedit.h>
#include <qlcdnumber.h>
class JOnas : public KMainWindow
{
Q_OBJECT
public:
JOnas();
public slots:
void slotupdate();
private:
QPushButton *btnupdate;
};
--------------------------------------------
Die Jonas.cc
#include <stdlib.h>
#include <stdio.h>
#include "jonas.moc"
#include <qmessagebox.h>
#include <kiconloader.h>
#include <qbitmap.h>
#include <qlineedit.h>
#include <qlcdnumber.h>
#include <qvariant.h>
#include <qdialog.h>
#include <qlabel.h>
#include <qpaintdevice.h>
#include "updatedia.moc"
#include <qwidget.h>
JOnas::JOnas() : KMainWindow()
{
setCaption("Hallo");
btnupdate = new QPushButton("Update", this);
btnupdate->setGeometry(80,150,50,25);
btnupdate->show();
connect(btnupdate, SIGNAL(clicked()), this, SLOT(slotupdate()));
}

dialog::dialog( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 )
{
this->resize(370,210);
this->setMinimumSize(0,0);
labeltest = new QLabel("Hallo", this) ;

}

dialog::~dialog() {
}
void JOnas::slotupdate()
{
dialog *dlg = new dialog;
dlg->show();
}
-----------------------
Die updatedia.h:
#ifndef FORM1_H
#define FORM1_H
#include <qlabel.h>
#include <qvariant.h>
#include <qdialog.h>
class QVBoxLayout;
class QHBoxLayout;
class QGridLayout;
class QLabel;
class dialog : public QDialog
{
Q_OBJECT
public:
dialog( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
~dialog();
QLabel *labeltest;
};
#endif // FORM1_H

Gruss
Jonas
der ist nicht mehr stinksauer ist, da es nach 3 Tagen geklappt hat :-)

Boron
03-04-2002, 00:02
Du musst deinem Dialog-Widget das Main-Windget (also dein "Hauptprogramm") als parent übergeben und nicht parent=0.
Das ist dann (glaube ich) JOnas, du musst an der Stelle wo du das Dialog-Objekt erstellst anstelle parent=0 halt parent=this übergeben.

Gruss Boron

marcopi
03-04-2002, 12:11
dialog::dialog( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 )


modal = TRUE

Das Hauptprogramm reagiert solange nicht , bis der Dialog geschlossen wird

gruss marco

TheDodger
03-04-2002, 17:41
Original geschrieben von jonasge
Hallo,
also danke für eure Hilfe, obwohl sie doch nicht wirklich Hilfreich war.

[...]



void JOnas::slotupdate()
{
dialog *dlg = new dialog;
dlg->show();
}



probier das mal aus:


void KOnas::slotupdate()
{
dialog dlg;
dlg.exec();
}


Damit wird der Dialog bereits als modal markiert und aufgerufen.



der ist nicht mehr stinksauer ist, da es nach 3 Tagen geklappt hat :-)

jaja ... wer lesen kann, ist klar im Vorteil :)
IMHO gibt es keine besser dokumentierte API als die von QT/KDE