Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. how to call Mainwindow method from a childwindow.cpp
Forum Updated to NodeBB v4.3 + New Features

how to call Mainwindow method from a childwindow.cpp

Scheduled Pinned Locked Moved Solved General and Desktop
16 Posts 2 Posters 2.2k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M moyin

    @jsulm thnks for reply,

    I tried your sugesstion, but it does't resolve my issue.
    while debugging into emit after_import() , i found this below lines of code can u just clear me what does it mean.

    // SIGNAL 0
    void Import::after_import()
    {
    QMetaObject::activate(this, &staticMetaObject, 0, 0);
    }
    QT_END_MOC_NAMESPACE

    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #4

    @moyin Your problem is for sure not in this code. Either the signal is not emitted, or not connected to slot, or (like I suggested before) you actually use the wrong Import instance (as you create a new temporary instance which you connect then)...
    Can you show your code after applying my suggestion?

    https://forum.qt.io/topic/113070/qt-code-of-conduct

    M 1 Reply Last reply
    0
    • jsulmJ jsulm

      @moyin Your problem is for sure not in this code. Either the signal is not emitted, or not connected to slot, or (like I suggested before) you actually use the wrong Import instance (as you create a new temporary instance which you connect then)...
      Can you show your code after applying my suggestion?

      M Offline
      M Offline
      moyin
      wrote on last edited by
      #5

      @jsulm thnks for rply,
      this is my mainwindow.cpp (constructor)

      MainWindow::MainWindow(QWidget *parent) :
      QMainWindow(parent),
      ui(new Ui::MainWindow)
      {

      ui->setupUi(this);
      QFont font("Plastique",10);
      

      // font.setStyleHint(QFont::Monospace);
      QApplication::setFont(font);
      ui->tabWidget_Main->setHidden(true);

      ui->tabWidget_CELL_CONFIG->setHidden(true);
      ui->tableWidget_cell_config_2->setColumnWidth(4,250);
      Disable_Root_Tabs();
      Disable_LS_Buttons();
      

      // Import *temp = new Import() ;
      // connect(temp, SIGNAL(after_import()),this, SLOT(slot_load_cell_dropdownlist()));
      imp = new Import() ;
      connect(imp, SIGNAL(after_import()),this, SLOT(slot_load_cell_dropdownlist()));

      }

      M 1 Reply Last reply
      0
      • M moyin

        @jsulm thnks for rply,
        this is my mainwindow.cpp (constructor)

        MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
        {

        ui->setupUi(this);
        QFont font("Plastique",10);
        

        // font.setStyleHint(QFont::Monospace);
        QApplication::setFont(font);
        ui->tabWidget_Main->setHidden(true);

        ui->tabWidget_CELL_CONFIG->setHidden(true);
        ui->tableWidget_cell_config_2->setColumnWidth(4,250);
        Disable_Root_Tabs();
        Disable_LS_Buttons();
        

        // Import *temp = new Import() ;
        // connect(temp, SIGNAL(after_import()),this, SLOT(slot_load_cell_dropdownlist()));
        imp = new Import() ;
        connect(imp, SIGNAL(after_import()),this, SLOT(slot_load_cell_dropdownlist()));

        }

        M Offline
        M Offline
        moyin
        wrote on last edited by
        #6

        @moyin said in how to call Mainwindow method from a childwindow.cpp:

        @jsulm thnks for rply,
        this is my mainwindow.cpp (constructor)

        MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
        {

        ui->setupUi(this);
        QFont font("Plastique",10);
        

        // font.setStyleHint(QFont::Monospace);
        QApplication::setFont(font);
        ui->tabWidget_Main->setHidden(true);

        ui->tabWidget_CELL_CONFIG->setHidden(true);
        ui->tableWidget_cell_config_2->setColumnWidth(4,250);
        Disable_Root_Tabs();
        Disable_LS_Buttons();
        

        // Import *temp = new Import() ;
        // connect(temp, SIGNAL(after_import()),this, SLOT(slot_load_cell_dropdownlist()));
        imp = new Import() ;
        connect(imp, SIGNAL(after_import()),this, SLOT(slot_load_cell_dropdownlist()));

        }

        this is my import.cpp where i'm emitting signal.

        #include "import.h"
        #include "ui_import.h"
        #include <QFileDialog>
        #include <QMessageBox>
        #include "JailHouseCellList.h"
        #include "readfromdump/ReadDmp.h"
        #include "mainwindow.h"
        #include <iostream>

        Import::Import(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Import)
        {
        ui->setupUi(this);
        QFont font("Plastique",10);
        // font.setStyleHint(QFont::Monospace);
        QApplication::setFont(font);

        }

        Import::~Import()
        {
        delete ui;
        }

        void Import::on_pushButton_import_config_clicked()
        {
        QString filepath = QFileDialog::getOpenFileName(this, tr("Import file"), "/home","Config_Files(*.info)") ;
        ui->lineEdit_config_File->setText(filepath);
        }

        void Import::on_pushButton_import_dump_clicked()
        {
        QString filepath = QFileDialog::getOpenFileName(this, tr("Import file"), "/home","Dump_Files(*.dmp)") ;
        ui->lineEdit_Dump_File->setText(filepath);
        }

        void Import::on_pushButton_create_imported_config_clicked()
        {
        try{
        std::string info_file = ui->lineEdit_config_File->text().toStdString() ;
        std::string dump_file = ui->lineEdit_Dump_File->text().toStdString() ;
        JailHouseCellList & JL = JailHouseCellList::getJailHouseCellList();
        ReadDmp jt(info_file,dump_file);
        JailHouseCell * jc = jt.get_cell();
        if( RootCell * j = dynamic_cast<RootCell * >(jc) )
        JL.add_rootcell_no_validation(*j);
        else
        JL.add_cell_no_validation(*jc);
        }
        catch(JailHouseCell_error & e)
        {
        std::string s = e.what();
        QMessageBox::warning(this,"Wrong input",e.what()) ;
        }
        catch(std::exception & e)
        {
        std::string s = e.what();
        QMessageBox::warning(this,"Wrong input",e.what()) ;
        }
        catch(...)
        {
        QMessageBox::warning(this,"unknownerror","unknownerror");
        }
        emit after_import();

        }

        //void Import::after_import() {
        // std::cout << "calling load_dropdownList() function" << std::endl ;
        //}

        jsulmJ 1 Reply Last reply
        0
        • M moyin

          @moyin said in how to call Mainwindow method from a childwindow.cpp:

          @jsulm thnks for rply,
          this is my mainwindow.cpp (constructor)

          MainWindow::MainWindow(QWidget *parent) :
          QMainWindow(parent),
          ui(new Ui::MainWindow)
          {

          ui->setupUi(this);
          QFont font("Plastique",10);
          

          // font.setStyleHint(QFont::Monospace);
          QApplication::setFont(font);
          ui->tabWidget_Main->setHidden(true);

          ui->tabWidget_CELL_CONFIG->setHidden(true);
          ui->tableWidget_cell_config_2->setColumnWidth(4,250);
          Disable_Root_Tabs();
          Disable_LS_Buttons();
          

          // Import *temp = new Import() ;
          // connect(temp, SIGNAL(after_import()),this, SLOT(slot_load_cell_dropdownlist()));
          imp = new Import() ;
          connect(imp, SIGNAL(after_import()),this, SLOT(slot_load_cell_dropdownlist()));

          }

          this is my import.cpp where i'm emitting signal.

          #include "import.h"
          #include "ui_import.h"
          #include <QFileDialog>
          #include <QMessageBox>
          #include "JailHouseCellList.h"
          #include "readfromdump/ReadDmp.h"
          #include "mainwindow.h"
          #include <iostream>

          Import::Import(QWidget *parent) :
          QDialog(parent),
          ui(new Ui::Import)
          {
          ui->setupUi(this);
          QFont font("Plastique",10);
          // font.setStyleHint(QFont::Monospace);
          QApplication::setFont(font);

          }

          Import::~Import()
          {
          delete ui;
          }

          void Import::on_pushButton_import_config_clicked()
          {
          QString filepath = QFileDialog::getOpenFileName(this, tr("Import file"), "/home","Config_Files(*.info)") ;
          ui->lineEdit_config_File->setText(filepath);
          }

          void Import::on_pushButton_import_dump_clicked()
          {
          QString filepath = QFileDialog::getOpenFileName(this, tr("Import file"), "/home","Dump_Files(*.dmp)") ;
          ui->lineEdit_Dump_File->setText(filepath);
          }

          void Import::on_pushButton_create_imported_config_clicked()
          {
          try{
          std::string info_file = ui->lineEdit_config_File->text().toStdString() ;
          std::string dump_file = ui->lineEdit_Dump_File->text().toStdString() ;
          JailHouseCellList & JL = JailHouseCellList::getJailHouseCellList();
          ReadDmp jt(info_file,dump_file);
          JailHouseCell * jc = jt.get_cell();
          if( RootCell * j = dynamic_cast<RootCell * >(jc) )
          JL.add_rootcell_no_validation(*j);
          else
          JL.add_cell_no_validation(*jc);
          }
          catch(JailHouseCell_error & e)
          {
          std::string s = e.what();
          QMessageBox::warning(this,"Wrong input",e.what()) ;
          }
          catch(std::exception & e)
          {
          std::string s = e.what();
          QMessageBox::warning(this,"Wrong input",e.what()) ;
          }
          catch(...)
          {
          QMessageBox::warning(this,"unknownerror","unknownerror");
          }
          emit after_import();

          }

          //void Import::after_import() {
          // std::cout << "calling load_dropdownList() function" << std::endl ;
          //}

          jsulmJ Offline
          jsulmJ Offline
          jsulm
          Lifetime Qt Champion
          wrote on last edited by
          #7

          @moyin Are you sure signal is emitted?

          https://forum.qt.io/topic/113070/qt-code-of-conduct

          M 1 Reply Last reply
          0
          • jsulmJ jsulm

            @moyin Are you sure signal is emitted?

            M Offline
            M Offline
            moyin
            wrote on last edited by
            #8

            @jsulm thanks for rply,
            i dont how to confirm the signal is emitted or not but when i run the application in debug mode and step into emit after_import(); it takes me into this code snippet. that i already shared you.

            / SIGNAL 0
            void Import::after_import()
            {
            QMetaObject::activate(this, &staticMetaObject, 0, 0);
            }
            QT_END_MOC_NAMESPACE

            jsulmJ 1 Reply Last reply
            0
            • M moyin

              @jsulm thanks for rply,
              i dont how to confirm the signal is emitted or not but when i run the application in debug mode and step into emit after_import(); it takes me into this code snippet. that i already shared you.

              / SIGNAL 0
              void Import::after_import()
              {
              QMetaObject::activate(this, &staticMetaObject, 0, 0);
              }
              QT_END_MOC_NAMESPACE

              jsulmJ Offline
              jsulmJ Offline
              jsulm
              Lifetime Qt Champion
              wrote on last edited by
              #9

              @moyin You can just put a breakpoint in your slot. Or when you're in that code block then just go further (step) to see what is happening.
              Also do

              qDebug() << connect(imp, SIGNAL(after_import()),this, SLOT(slot_load_cell_dropdownlist()));
              

              to see whether the connection was actually successful.

              https://forum.qt.io/topic/113070/qt-code-of-conduct

              1 Reply Last reply
              0
              • M Offline
                M Offline
                moyin
                wrote on last edited by
                #10

                @jsulm , yes! that is
                qDebug() << connect(imp, SIGNAL(after_import()),this, SLOT(slot_load_cell_dropdownlist()));
                returning true.

                And if i put BreakPoint in slot_load_cell_dropdownlist(). debugger not reaching to that BreakPoint.

                jsulmJ 1 Reply Last reply
                0
                • M moyin

                  @jsulm , yes! that is
                  qDebug() << connect(imp, SIGNAL(after_import()),this, SLOT(slot_load_cell_dropdownlist()));
                  returning true.

                  And if i put BreakPoint in slot_load_cell_dropdownlist(). debugger not reaching to that BreakPoint.

                  jsulmJ Offline
                  jsulmJ Offline
                  jsulm
                  Lifetime Qt Champion
                  wrote on last edited by
                  #11

                  @moyin Do you by any chance have more than one Import instance?
                  And what are you doing in slot_load_cell_dropdownlist()?

                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                  M 1 Reply Last reply
                  0
                  • jsulmJ jsulm

                    @moyin Do you by any chance have more than one Import instance?
                    And what are you doing in slot_load_cell_dropdownlist()?

                    M Offline
                    M Offline
                    moyin
                    wrote on last edited by
                    #12

                    @jsulm
                    @ Do you by any chance have more than one Import instance?
                    YES!
                    Actually i have 2 import instance to the same pointer (imp) .

                    @what are you doing in slot_load_cell_dropdownlist()?
                    i am just reinitialising a Qcombobox.

                    jsulmJ 1 Reply Last reply
                    0
                    • M moyin

                      @jsulm
                      @ Do you by any chance have more than one Import instance?
                      YES!
                      Actually i have 2 import instance to the same pointer (imp) .

                      @what are you doing in slot_load_cell_dropdownlist()?
                      i am just reinitialising a Qcombobox.

                      jsulmJ Offline
                      jsulmJ Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on last edited by
                      #13

                      @moyin said in how to call Mainwindow method from a childwindow.cpp:

                      Actually i have 2 import instance to the same pointer (imp) .

                      What?! Why? Then the first one is lost as you overwrite the pointer when you create the second instance. And which of them did you actually connected?

                      https://forum.qt.io/topic/113070/qt-code-of-conduct

                      M 1 Reply Last reply
                      1
                      • jsulmJ jsulm

                        @moyin said in how to call Mainwindow method from a childwindow.cpp:

                        Actually i have 2 import instance to the same pointer (imp) .

                        What?! Why? Then the first one is lost as you overwrite the pointer when you create the second instance. And which of them did you actually connected?

                        M Offline
                        M Offline
                        moyin
                        wrote on last edited by
                        #14

                        @jsulm Now i changed my code like,

                        MainWindow::MainWindow(QWidget *parent) :
                        QMainWindow(parent),
                        ui(new Ui::MainWindow)
                        {

                        ui->setupUi(this);
                        QFont font("Plastique",10);
                        

                        // font.setStyleHint(QFont::Monospace);
                        QApplication::setFont(font);
                        ui->tabWidget_Main->setHidden(true);

                        ui->tabWidget_CELL_CONFIG->setHidden(true);
                        ui->tableWidget_cell_config_2->setColumnWidth(4,250);
                        Disable_Root_Tabs();
                        Disable_LS_Buttons();
                        

                        // Import *temp = new Import() ;
                        // connect(temp, SIGNAL(after_import()),this, SLOT(slot_load_cell_dropdownlist()));
                        imp2 = new Import(this) ;
                        std::cout << "just before connect" << std::endl;
                        qDebug() << connect(imp2, SIGNAL(after_import()),this, SLOT(slot_load_cell_dropdownlist()));
                        std::cout << "just after connect" << std::endl;
                        }

                        M 1 Reply Last reply
                        0
                        • M moyin

                          @jsulm Now i changed my code like,

                          MainWindow::MainWindow(QWidget *parent) :
                          QMainWindow(parent),
                          ui(new Ui::MainWindow)
                          {

                          ui->setupUi(this);
                          QFont font("Plastique",10);
                          

                          // font.setStyleHint(QFont::Monospace);
                          QApplication::setFont(font);
                          ui->tabWidget_Main->setHidden(true);

                          ui->tabWidget_CELL_CONFIG->setHidden(true);
                          ui->tableWidget_cell_config_2->setColumnWidth(4,250);
                          Disable_Root_Tabs();
                          Disable_LS_Buttons();
                          

                          // Import *temp = new Import() ;
                          // connect(temp, SIGNAL(after_import()),this, SLOT(slot_load_cell_dropdownlist()));
                          imp2 = new Import(this) ;
                          std::cout << "just before connect" << std::endl;
                          qDebug() << connect(imp2, SIGNAL(after_import()),this, SLOT(slot_load_cell_dropdownlist()));
                          std::cout << "just after connect" << std::endl;
                          }

                          M Offline
                          M Offline
                          moyin
                          wrote on last edited by
                          #15

                          @jsulm
                          Same result it is not calling slot_load_cell_dropdownlist() at all.

                          M 1 Reply Last reply
                          0
                          • M moyin

                            @jsulm
                            Same result it is not calling slot_load_cell_dropdownlist() at all.

                            M Offline
                            M Offline
                            moyin
                            wrote on last edited by
                            #16

                            yeah! man its working thanks alot.

                            1 Reply Last reply
                            0

                            • Login

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • Users
                            • Groups
                            • Search
                            • Get Qt Extensions
                            • Unsolved