Seite 1 von 1

Einen neuen Dialog öffnen

Verfasst: 4. Juli 2006 02:12
von Streifenhörnchen
Also: ich hab bestimmt schon hundert foren durchsucht und ich hab nix nützliches gefunden, auch in diesem Forum habe ich gesucht und nur einen Thread gefunden der mir nützlich erschien, aber dann hatts doch nicht geklappt.

Mein Problem(da hab ich so viele von) ist dass ich von einer Form durch nen button ne neue Form aufrufen will. Entweder ich bin zu dumm, oder das ist zu kompliziert oder zu simpel dass ich nicht drauf komme.

Vielleicht kann mir ja hier jemand helfen.

Ich habs so gemacht wie http://www.qtforum.de/forum/viewtopic.p ... ton+dialog
stargazer aber das funzt nicht.

Ich verwende Qt 4.1.4 und bin relativ neu in der Sprache C++ und auch in Qt.


Über Antworten und vllt. auch Codebeispiele würde ich mich sehr freuen.

Danke im vorraus.

Streifenhörnchen

Verfasst: 4. Juli 2006 07:29
von macman
Für solch triviale Sachen empfehle ich dir das Studium der Beispiele, die Qt beiliegen. Wenn Du eins gefunden hast, was das tut was Du machen willst, dann guck dir den Code an, setze Breakpoints, spiel mit rum. Learning by doing eben.

Verfasst: 4. Juli 2006 12:22
von Streifenhörnchen
Hehe, der ist gut. Rate mal was ich schon die ganze zeit versuche...

Eigentlich hab ich gedacht dass hier jemand nen Tipp hat... wohl nich

Verfasst: 4. Juli 2006 12:53
von DarkWotan
Du hast nichts gefunden, weil das wirklich trivial ist und wie macman schon sagte in der Dokumentation Beispiele dazu sind.

Ungetesteter Quickhack

Code: Alles auswählen

class MyForm : public QWidget
{
  //...
};

class MyMainWindow : public QMainWindow
{
  Q_OBJECT

  private:
  MyForm* myForm;
  QPushButton *button;

  public:
  MyMainWindow();
};

MyMainWindow::MyMainWindow()
{
  myForm = new MyForm;
  button = new QPushButton("Neues Formular", this);

  connect(button, SIGNAL(clicked()), myForm, SLOT(show()));
}
MfG, Cedric

Verfasst: 4. Juli 2006 15:48
von Streifenhörnchen
So ich hab das nun so versucht und beim compilieren bekomm ich immer diese Fehler:

.objs\main.o:main.cpp:(.text$_ZN6WindowD1Ev[Window::~Window()]+0xb): undefined reference to `vtable for Window'
.objs\main.o:main.cpp:(.text$_ZN6WindowD1Ev[Window::~Window()]+0x17): undefined reference to `vtable for Window'
.objs\main.o:main.cpp:(.text$_ZN6WindowC1Ev[Window::Window()]+0x3a): undefined reference to `vtable for Window'
.objs\main.o:main.cpp:(.text$_ZN6WindowC1Ev[Window::Window()]+0x46): undefined reference to `vtable for Window'
collect2: ld returned 1 exit status

Ich verwende CodeBlocks und compiliere auch mit CodeBlocks. Das mit dem Consolenkram versteh ich nicht so ganz ;)

Hat irgendjemand ne Idee??

Danke, Streif~

Verfasst: 5. Juli 2006 06:48
von DarkWotan
Streifenhörnchen hat geschrieben:So ich hab das nun so versucht und beim compilieren bekomm ich immer diese Fehler:

.objs\main.o:main.cpp:(.text$_ZN6WindowD1Ev[Window::~Window()]+0xb): undefined reference to `vtable for Window'
.objs\main.o:main.cpp:(.text$_ZN6WindowD1Ev[Window::~Window()]+0x17): undefined reference to `vtable for Window'
.objs\main.o:main.cpp:(.text$_ZN6WindowC1Ev[Window::Window()]+0x3a): undefined reference to `vtable for Window'
.objs\main.o:main.cpp:(.text$_ZN6WindowC1Ev[Window::Window()]+0x46): undefined reference to `vtable for Window'
collect2: ld returned 1 exit status
Das sind aber keine Syntax-, eher semantische Fehler woraus Linkerfehler resultieren.
Er meldet ein Problem mit der virtuelle Methoden-Tabelle und dem Kon- und Destruktor von Window. Poste doch bitte etwas Code, damit man auch sieht, was du kehrtver machst.
Ich verwende CodeBlocks und compiliere auch mit CodeBlocks. Das mit dem Consolenkram versteh ich nicht so ganz ;)
Dabei gibt's da nicht viel zu verstehen. Du bist einfach zu faul, dir die sehr gute Doku durchzulesen.

MfG, Cedric

Verfasst: 5. Juli 2006 11:14
von Sym
Da ich Codeblocks nicht kenne und ich auch faul bin und mir deshalb nicht die Mühe mache, im Internet danach zu suchen, kann ich leider nicht helfen. ;)

Verfasst: 5. Juli 2006 11:42
von Flachkoepper
Das sieht doch stark danach aus, dass einmal vergessen wurde, qmake aufzurufen.

Re: Einen neuen Dialog öffnen

Verfasst: 5. Juli 2006 11:49
von patrik08
Streifenhörnchen hat geschrieben:Also: ich hab bestimmt schon hundert foren durchsucht und ich hab nix nützliches gefunden, auch in diesem Forum habe ich gesucht und nur einen Thread gefunden der mir nützlich erschien, aber dann hatts doch nicht geklappt.

Mein Problem(da hab ich so viele von) ist dass ich von einer Form durch nen button ne neue Form aufrufen will. Entweder ich bin zu dumm, oder das ist zu kompliziert oder zu simpel dass ich nicht drauf komme.

Vielleicht kann mir ja hier jemand helfen.

Ich weiss ... auch ich hatte grosse muhe ein neuen dialog zu oeffnen da die qt4 beispiele fast keins ein richtigen dialog oeffnet .. es sind meistens nicht mal richtige classen da viel in main.cpp geschrieben ist das aus dem konspet bringt...

Ich habe es erst richtig gelernt ( dialoge zu oeffnen ) als ich http://sourceforge.net/projects/monkeystudio/ gefunden habe ... dieses IDE hat eine gute methode um die parent immer auf null zu setzen...
Die template um header e source zu bauen sind super... somit habe ich mir selber ein kleines tool geschrieben um wenigstens die vorlage vom designer zu schreiben ist heute noch dort http://ppk.ciz.ch/qt_c++/qt/res.html einfach die class name reinschreiben die ganz oben ist im designer Dialog und doppelclicken um die vorlage zu bauen...

dann um ein neuen dialog zu oeffnen muss ich nur noch ein slot hinzufuegen mit.

Code: Alles auswählen

void Gui_Main::OpenAbout()
{
  Gui_About::self( this )->exec(); 
}
und der parent ist automatisch gesetzt ... man kann damit auch parameter am dialog senden..

Code: Alles auswählen


void HTML_Edit::makehrefLink()
{
    bool is_selected = html_area->textCursor().hasSelection();
    QString sthtml = html_area->textCursor().selectedText();
    if (vol_18->isChecked()) {
        QString ltext;
         if (sthtml.size() < 1) {
           sthtml= "Text to link";  
         }
         Href_Gui::self( this )->text_href->setText(sthtml);
         Href_Gui::self( this )->exec();
         if (Href_Gui::self) {
              QStringList data = Href_Gui::_self->GetUserConfig();
               if (data.count() > 0) {
               /*qDebug() << "### linerr rrr   " << QString(data.at(0));
               qDebug() << "### linerr rrr   " << QString(data.at(1));
               qDebug() << "### linerr rrr   " << QString(data.at(2));*/
                ltext ="<a href=""+QString(data.at(1))+"#target="+QString(data.at(2))+"">"+QString(data.at(0))+"</a>";
                QTextDocumentFragment fragment = QTextDocumentFragment::fromHtml(ltext);
                html_area->textCursor().insertFragment(fragment); 
                vol_18->setChecked(false);
                }
          }
    } else {
        QTextDocumentFragment fragment = QTextDocumentFragment::fromHtml(sthtml);
        html_area->textCursor().insertFragment(fragment);     
    }
    
}
Und die beste methode um zu lernen dialoge zu oeffnen ist einfach in fremden source code reinzuschauen....

Zu zeit existieren bei http://sourceforge.net/ 800 projekten mit QT davon
25 mit qt4 suchwort einfach bei softwaremap den richtigen filter setzen...

ich bin auch dabei mit http://sourceforge.net/projects/qtexcel-xslt/ und
http://sourceforge.net/projects/visual-xsltproc/ nach 3 monaten qt erfahrung...