Wie manage ich es, nach QWidget Fenster_1 destroy() ein zweites Fenster zu erstellen?



  • Hallo,
    ich habe ein Programm mit einem Hauptfenster, in dem eine Tabelle mit benutzerdefinierten Spalten angezeigt werden soll.
    Damit der Benutzer die Tabelle konfigurieren kann, wird beim Programmstart zuerst ein anderes Fenster angezeigt, in welches Texteingaben gemacht werden können.
    Meine grobe Syntax sieht bisher so aus:
    @ class window_settings : public QWidget
    {
    Q_OBJECT

      public:
        int columns;
        my_QTextEdit* edit_person[10];
        QPushButton* button_create;
     
        window_settings(int columns, QWidget* parent = 0);
     
      public slots:
        void createMainWindow();
    };
     
    class window_main : public QWidget
    {
      Q_OBJECT
     
      public:
        QTableWidget* table;
        QStringList table_headers_h;
     
        window_main(int rows, int columns, QStringList &table_headers_h, QWidget* parent = 0);
    };
     
      int main(int argc, char** args)
      {
        FreeConsole();
        QApplication app(argc, args);
     
        window_settings window_one(10, NULL);
        window_one.show();
     
        app.exec();
       return 0;
      }
     
      window_settings::window_settings(int columns, QWidget* parent) : QWidget(parent)
      {
        this->columns = columns;
        for(int i = 0; i < columns; i++)
        {
          this->edit_person[i] = new my_QTextEdit(my_QTextEdit::TEXT, this);
        }
        button_create = new QPushButton("Create MainWindow", this);
        connect(button_create, SIGNAL(clicked()), this, SLOT(createMainWindow()));
      }
     
      void window_settings::createMainWindow()
      {
        QStringList table_headers_h;
        for(int i = 0; i < this->columns; i++)
        {
        table_headers_h << this->edit_person[i]->toPlainText();
        }
        this->destroy(true, true);
        window_main* window_two = new window_main(100, this->columns+1, table_headers_h, NULL);
        window_two->show();
      }@
    

    Nun habe ich dazu zwei Fragen:

    1. Warum ist es beim Erstellen des zweiten Fensters (Hauptfenster) notwendig, das QWidget dynamisch zu erstellen? Wo bzw. in welchen Gültigkeitsbereich springt denn die Programmausführung nach dem Befehl:
      @window_two->show();@
      ?? Wieder in den event-loop? Aber wo befindet sich dieser? Schließlich musste ich window_one auch nicht dynamisch erstellen, also befindet sich der event-loop in der main-Funktion? Wie macht das Programm das? Mit welchem Befehl weise ich das Programm an, wieder in die main-Funktion zu springen (falls es so sein sollte)?

    2. Wenn ich das Programm laufen lasse und das erste Fenster schließe, so wird auch wie zu erwarten das Programm geschlossen. Erstelle ich aber per Button das Hauptfenster und schließe dieses dann, so läuft das Programm im Hintergrund weiter, bis ich es über den TaskManager schließe... also irgendwas stimmt da doch noch nicht so ganz...
      Hat mir da jemand einen Tipp, wie man prinzipiell ein solches Programm mit mehreren unabhängigen Fenstern strukturiert?

    Liebe Grüße



  • Hat sich geklärt.

    Wenn es jemanden interessiert:
    http://qt-project.org/forums/viewthread/48524/


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.