Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Special Interest Groups
  3. C++ Gurus
  4. [Moved] Document/View application
Forum Updated to NodeBB v4.3 + New Features

[Moved] Document/View application

Scheduled Pinned Locked Moved C++ Gurus
20 Posts 4 Posters 6.7k 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.
  • C Offline
    C Offline
    CapnMikey
    wrote on last edited by
    #3

    Thanks for the quick reply.

    Creating "information.h" seems like a good solution, but how can I make it work? How would MainWindow own the working copy and pass it to the other classes?

    In Qt I kept getting compile errors when I didn't include the struct keyword in places where it seemed redundant.

    1 Reply Last reply
    0
    • M Offline
      M Offline
      mlong
      wrote on last edited by
      #4

      Information.h:
      @
      struct Information {
      // foo
      };
      @

      UserEntry.h:
      @
      #include "Information.h"
      ...
      void userdata(Information *info) {...}; // Takes a pointer to info
      // or
      void userdata(Information &info) {...}; // Takes a reference to info
      @

      MainWindow.h:
      @
      #include "Information.h"
      ...
      private:
      Information info;
      UserEntry *userEntry;
      @

      MainWindow.cpp:
      @
      MainWindow::someMethod() {
      userEntry->userdata(&info); // Pass the address of info.
      // or
      userEntry->userdata(info); // using reference
      }
      @

      Edit: Corrected code. Thanks Gerolf!

      Software Engineer
      My views and opinions do not necessarily reflect those of anyone -- living or dead, real or fictional -- in this universe or any other similar multiverse node. Void where prohibited. Your mileage may vary. Caveat emptor.

      1 Reply Last reply
      0
      • C Offline
        C Offline
        CapnMikey
        wrote on last edited by
        #5

        Thanks, I'll give it a try.

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

          Hi mlong,

          I think you meant:

          MainWindow.cpp:
          @
          MainWindow::someMethod() {
          userEntry->userdata(&info); // Pass the address of info.
          // or
          userEntry->userdata(info); // using reference
          }
          @

          as userEntry is a pointer to the UserEntry class...

          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
          • A Offline
            A Offline
            andre
            wrote on last edited by
            #7

            Note that you might want to use forward declares in headers instead of includes. That means:

            @
            //MainWindow.h
            struct Information;

            //...
            private:
            Information* m_information;
            @

            and then only in the MainWindow.cpp do the #include of Information.h.

            It makes compilation faster.

            1 Reply Last reply
            0
            • C Offline
              C Offline
              CapnMikey
              wrote on last edited by
              #8

              No luck - below is the MainWindow and Information code. I left out the UserData code to see if this would work before making it any more complex. This generates a compile error code:

                       request for member 'a' in 'info', which is of non-class type 'Information*'
              

              Is this caused by a syntax error that I am missing?

              MainWindow.h
              @
              #ifndef MAINWINDOW_H
              #define MAINWINDOW_H

              #include <QMainWindow>
              #include "Information.h"

              namespace Ui {
              class MainWindow;
              }

              class MainWindow : public QMainWindow
              {
              Q_OBJECT

              public:
              explicit MainWindow(QWidget *parent = 0);
              ~MainWindow();

              private:
              struct information *info;

              private:
              Ui::MainWindow *ui;
              };
              #endif // MAINWINDOW_H
              @

              MainWindow.cpp
              @
              #include "mainwindow.h"
              #include "ui_mainwindow.h"

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

              ui->setupUi(this);
              
              info = new information;
              
              info.a = "A";
              info.b = "B";
              info.c = "C";
              

              }

              MainWindow::~MainWindow()
              {
              delete ui;
              }
              @

              Information.h
              @
              #ifndef INFORMATION_H
              #define INFORMATION_H

              #include <QtGui>

              struct information
              {
              QString a;
              QString b;
              QString c;
              };

              #endif // INFORMATION_H

              @

              Added @ tags around code sections. Please do that yourself next time; Andre

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

                There seems to be some weird mismatch of #ifdefs and #endif's in your code. Perhaps you should fix these first?

                Oh, and in your MainWindow, you have a pointer to an Information instance, while you do not seem to be creating an instance and trying to assign to it as if it is a normal member variable.

                1 Reply Last reply
                0
                • C Offline
                  C Offline
                  CapnMikey
                  wrote on last edited by
                  #10

                  That seems to have come from copying and pasting. The definitions are okay in my files.

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

                    [quote author="CapnMikey" date="1315495836"]That seems to have come from copying and pasting. The definitions are okay in my files.[/quote]
                    Then please update your previous post to reflect the actual state of your code.

                    1 Reply Last reply
                    0
                    • C Offline
                      C Offline
                      CapnMikey
                      wrote on last edited by
                      #12

                      Line 15 in Information.h should be line 25 in MainWindow.h. Sorry about the mixup.

                      1 Reply Last reply
                      0
                      • A Offline
                        A Offline
                        andre
                        wrote on last edited by
                        #13

                        [quote author="CapnMikey" date="1315496093"]Line 15 in Information.h should be line 25 in MainWindow.h. Sorry about the mixup.[/quote]
                        Please just use the Edit button next to your post to modify it and fix the mixup.

                        1 Reply Last reply
                        0
                        • C Offline
                          C Offline
                          CapnMikey
                          wrote on last edited by
                          #14

                          Okay, the code above has been modified.

                          Thanks for pointing out the edit button.

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

                            Your struct is named information, but the definition in mainwindow.h is Information. C++ is case sensitive...

                            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
                            • C Offline
                              C Offline
                              CapnMikey
                              wrote on last edited by
                              #16

                              I corrected the case error as well (see post above). I still get the same error message.

                              1 Reply Last reply
                              0
                              • A Offline
                                A Offline
                                andre
                                wrote on last edited by
                                #17

                                Did you also note the remark I posted above?

                                [quote author="Andre" date="1315495737"]Oh, and in your MainWindow, you have a pointer to an Information instance, while you do not seem to be creating an instance and trying to assign to it as if it is a normal member variable. [/quote]

                                1 Reply Last reply
                                0
                                • C Offline
                                  C Offline
                                  CapnMikey
                                  wrote on last edited by
                                  #18

                                  I added line 13 to the MainWindow.cpp above, but I still get the same error message. Is this what you are referring to?

                                  1 Reply Last reply
                                  0
                                  • A Offline
                                    A Offline
                                    andre
                                    wrote on last edited by
                                    #19

                                    Either, change line 20 in MainWindow.h to
                                    @
                                    Information info;
                                    @
                                    and remove line 13 from MainWindow.cpp, or

                                    change line 20 in MainWindow.h to
                                    @
                                    Information* info;
                                    @
                                    and change lines 15-17 in MainWindow.cpp into:
                                    @
                                    info->a = "A";
                                    info->b = "B";
                                    info->c = "C";
                                    @
                                    and insert this line as line 24:
                                    @
                                    delete info;
                                    @

                                    In either case, get yourself a good book on C++ to get yourself a solid introduction into the language you are working with. Qt does not shield you from having to learn C++.

                                    1 Reply Last reply
                                    0
                                    • C Offline
                                      C Offline
                                      CapnMikey
                                      wrote on last edited by
                                      #20

                                      Andre (and everyone else)-

                                      Thanks for your help. The first option compiled correctly. Having seen something that works I hope I can figure it out from here.

                                      Your last suggestion is appropriate. However, I have a large stack of books on C++ programming. The problem is the definition of the word "good". I learned chemical thermodynamics by using a large stack of textbooks. None of them were particulary good. But, where one authors explanation failed another author provided a more thorough explanation. I was able to piece it together that way. I haven't found that approach to work well for understanding C++.

                                      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