Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. [Solved] Full MDI Example
Qt 6.11 is out! See what's new in the release blog

[Solved] Full MDI Example

Scheduled Pinned Locked Moved General and Desktop
15 Posts 5 Posters 19.1k Views 1 Watching
  • 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.
  • E Offline
    E Offline
    Exotic_Devel
    wrote on last edited by
    #6

    When I run the application I get this output:

    Object:: connect: No such slot QMainWindow:: createMdiChild ()

    Below is the code:

    @#ifndef WINDOWMAIN_H
    #define WINDOWMAIN_H

    #include <QMainWindow>
    #include <QMdiArea>

    class WindowMain : public QMainWindow
    {

    public:
        WindowMain(QWidget *parent = 0);
    
        ~WindowMain();
    
    private slots:
        void createMdiChild();
    
    private:
        // Area MDI
        QMdiArea *mdiarea;
    
        // Menus
        QMenu *arquivos;
    
        // QActions de menus
        QAction *clientes;
    

    };

    #endif // WINDOWMAIN_H
    @

    @#include <QApplication>
    #include <QTextCodec>
    #include <QDesktopWidget>
    #include <QRect>
    #include <QMenuBar>
    #include <QToolBar> // Cabeçalhos da API Qt que serão usadas na janela pincipal
    #include <QStatusBar>
    #include <QList>
    #include <QLabel>

    #include "WindowMain.h" // Usa o arquivo de cabeçalho onde a classe foi definida
    #include "SubWindClientes.h"

    /* Define a classe WindowMain e já invoca o
    construtor da classe pai, passando o ponteiro
    "parent" como parâmetro.*/

    WindowMain::WindowMain(QWidget *parent):QMainWindow(parent)
    {
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); // Define os caracteres da
    // aplicação p/ UTF-8

    setWindowTitle("Sistema Integrado de Gestão Óptica - MÓDULO RETAGUARDA");
    
    
    // Exibe a barra de status de QMainWindow
    statusBar()->show();
    
    // Prepara a area de trabalho MDI da aplicação
    mdiarea = new QMdiArea;
    setCentralWidget(mdiarea);
    
    
    // Prepara o menu principal da aplicação
    arquivos                        = menuBar()->addMenu("&Arquivo");
    
    
    // Prepara os itens de menu
    clientes                        = new QAction("Clientes", arquivos);
    
    // Carregando a lista de itens
    QList <QAction *> listarquivos;
    
    listarquivos << clientes;
    
    
    //Adicionando a lista de intens aos menus
    arquivos->addActions(listarquivos);
    
    // Deixando a janela no centro da tela
    QRect ct = geometry();
    ct.moveCenter(QApplication::desktop()->availableGeometry().center());
    setGeometry(ct);
    
    connect(clientes, SIGNAL(triggered()), this, SLOT(createMdiChild()));
    

    }

    WindowMain::~WindowMain()
    {
    delete mdiarea;
    }

    void WindowMain::createMdiChild()
    {
    SubWindClientes *child = new SubWindClientes;
    mdiarea->addSubWindow(child);
    child->show();
    }
    @

    @#include "WindowMain.h"
    #include <QApplication>

    int main(int argc, char *argv [])
    {
    QApplication programa(argc, argv); // Objeto da aplicação

    WindowMain windmain;                 // Objeto da janela principal
    
    windmain.show();
    
    return programa.exec&#40;&#41;;
    

    }
    @

    Thanks for the help

    1 Reply Last reply
    0
    • G Offline
      G Offline
      giesbert
      wrote on last edited by
      #7

      your MainWindow misses the Q_OBJECT macro

      @
      #ifndef WINDOWMAIN_H
      #define WINDOWMAIN_H

      #include <QMainWindow>
      #include <QMdiArea>

      class WindowMain : public QMainWindow
      {
      Q_OBJECT;
      public:
      WindowMain(QWidget *parent = 0);

          ~WindowMain();
          // ...
      

      };

      #endif // WINDOWMAIN_H

      @

      Nokia Certified Qt Specialist.
      Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

      1 Reply Last reply
      0
      • E Offline
        E Offline
        Exotic_Devel
        wrote on last edited by
        #8

        Thanks friend, now running.
        After I added the Q_OBJECT started giving an error

        / home / Matthew / Projects / Tests / WindowMain.cpp: -1: error: undefined reference to `vtable for WindowMain '

        To solve edited the project file:

        of

        @HEADERS +=
        SubWindClientes.h
        WindowMain.h

        SOURCES +=
        SubWindClientes.cpp
        WindowMain.cpp
        Main.cpp
        @

        to

        @HEADERS +=
        SubWindClientes.h
        WindowMain.h \

        SOURCES +=
        SubWindClientes.cpp
        WindowMain.cpp
        Main.cpp
        @

        Do not know why just adding these two backslashes solved the error.

        1 Reply Last reply
        0
        • A Offline
          A Offline
          anselmolsm
          wrote on last edited by
          #9

          [quote author="Denis Kormalev" date="1308946704"]Please don't use non-English language in non-national part of DevNet.[/quote]

          matheusssilva_BR, I repeat, you can write in Portuguese in the "Portuguese forum":http://developer.qt.nokia.com/forums/viewforum/34 .
          [pt_BR] Você pode escrever em Português no "fórum em Português":http://developer.qt.nokia.com/forums/viewforum/34 [/pt_BR]

          [quote author="matheusssilva_BR" date="1309010152"]
          Do not know why just adding these two backslashes solved the error.[/quote]

          No, the backslashes did not solve your problem.

          So, what happened?
          When you edited the .pro file, you forced an automatic execution of qmake before the next execution of make. (Actually, if your .pro file looks like what you posted above, with a backslash after the last file name, I expected an error...)

          Summing up: When you use the Q_OBJECT macro, the class has to be processed by moc (the Qt meta object compiler); in general qmake does it for you. This vtable error occurs when you add the Q_OBJECT macro and try to build the project without running qmake. For more details, "take a look here":http://doc.qt.nokia.com/4.7/metaobjects.html#meta-object-system

          Anselmo L. S. Melo (anselmolsm)

          1 Reply Last reply
          0
          • E Offline
            E Offline
            Exotic_Devel
            wrote on last edited by
            #10

            So what would be the solution? I just edit the code to compile and send any extra procedure should be done by Qt Creator.

            What to do now?


            As for the forum in Portuguese'll be honest with you, when I visited the forum in Portuguese completely lost the will to participate, there are hardly any topics and there are few who do not have the majority response.
            Truth be told Qt is widely used in Brazil and Portuguese-speaking countries.
            I believe that we can not wait a large participation of Brazilians there.

            Cursed be Cabral :-) |o|

            I do not use Qt as the enthusiast, student, etc.. Although it is now beginning to develop in Qt I use for professional development, then the help of the community is very important to me.

            1 Reply Last reply
            0
            • A Offline
              A Offline
              anselmolsm
              wrote on last edited by
              #11

              [quote author="matheusssilva_BR" date="1309015190"]So what would be the solution?
              [/quote]

              Run qmake when you add the Q_OBJECT macro.

              [quote author="matheusssilva_BR" date="1309015190"]
              I just edit the code to compile and send any extra procedure should be done by Qt Creator.
              What to do now?
              [/quote]

              Qt Creator automatically ran qmake for you when you edited the .pro file. I don't know if Creator can internally detect when the user adds a new Q_OBJECT macro to a file. I also think it would be good.

              In my previous post I explained to you that the backslash was not the solution.


              I agree with you, unfortunately the Portuguese forums aren't popular. I recommended it for you because:

              • you are a potential contributor to post things there;
              • "you mentioned the use of google translator":http://developer.qt.nokia.com/forums/viewthread/6978/ to write your posts. So, that's why I thought you would feel more comfortable writing in Portuguese there. Of course you are free to keep posting in the international forums, it was just a suggestion.

              Now it's better to stop this part of the discussion, as it is completely out of the scope of this thread.

              Anselmo L. S. Melo (anselmolsm)

              1 Reply Last reply
              0
              • E Offline
                E Offline
                Exotic_Devel
                wrote on last edited by
                #12

                So what you say is that this is not the most appropriate way to resolve are problems? So what would it be? Run qmake manually?

                The way I solved (by changing the .pro) can bring me any side effects?

                What I axei strange is that after I edited the .pro in this project, other projects that also emit the error adding Q_OBJECT, now emit no more, without me having to edit .pro them.

                1 Reply Last reply
                0
                • G Offline
                  G Offline
                  giesbert
                  wrote on last edited by
                  #13

                  I'm not 100% sure, when creator runs qmake, it definitly does when you edit the .pro file. Sometimes (I'm not sure if always) changing the logic that is needed for makefiles (which are created by qmake) needs rebuild by hand.

                  By hand means not to go to the command line, it means right click on the project --> rebuild.

                  Nokia Certified Qt Specialist.
                  Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

                  1 Reply Last reply
                  0
                  • ? Offline
                    ? Offline
                    A Former User
                    wrote on last edited by
                    #14

                    Usually it's enough to just do "right click -> run qmake". If that doesn't work and I can't find the error I usually do a rebuilt (doesn't hurt once in while, especially, if you have generated files), too.

                    1 Reply Last reply
                    0
                    • E Offline
                      E Offline
                      Exotic_Devel
                      wrote on last edited by
                      #15

                      Ok, understood now, we won, was a big help

                      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
                      • Unsolved