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. The same code works under Windows and fails under GNU/Linux
Forum Updated to NodeBB v4.3 + New Features

The same code works under Windows and fails under GNU/Linux

Scheduled Pinned Locked Moved General and Desktop
26 Posts 5 Posters 10.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.
  • A Offline
    A Offline
    andre
    wrote on last edited by
    #2

    It seems very clear to me. Create a QApplication object in your main function before you create anything that might need the paint system.

    1 Reply Last reply
    0
    • V Offline
      V Offline
      vishwajeet
      wrote on last edited by
      #3

      Could u post your main ?

      does you window code has same main as in Linux code ? cause the same error you should also get for windows then

      Born To Code !!!

      1 Reply Last reply
      0
      • J Offline
        J Offline
        jerome.bouat
        wrote on last edited by
        #4

        There is no difference in main function between Windows and Linux:
        @int main(int argc,char **argv)
        {
        // User interface enabled
        if (argc < 3 || argv[1] == string(":"))
        {
        MyApp app(argc,argv);
        return app.exec(); // event loop
        }
        // User interface disabled
        int code = 0;
        try
        {
        extern void run(const QString &,const QString &);
        if (argc == 3) run(argv[1],argv[2]);
        }
        catch (int _code)
        {
        code = _code;
        }
        return code;
        }@

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

          What is MyApp? Is it a QApplication decendant class?

          1 Reply Last reply
          0
          • V Offline
            V Offline
            vishwajeet
            wrote on last edited by
            #6

            I am assuming from code

            @ MyApp app(argc,argv);
            return app.exec(); // event loop
            @

            MyApp here is derived from QCoreApplication then make it QApplication then no issues with this

            However what is this segement do ? and when is it executed

            @ extern void run(const QString &,const QString &);
            if (argc == 3) run(argv[1],argv[2]);
            @

            This could be executed on Linux and does not create MyApp in this case.

            Hey need clarification on above from you, i have assumed many things i believe

            Born To Code !!!

            1 Reply Last reply
            0
            • J Offline
              J Offline
              jerome.bouat
              wrote on last edited by
              #7

              @class MyApp : public QApplication
              {
              public:
              bool tested;
              QString program;
              streambuf *coutbuf;
              virtual ~MyApp();
              MyApp(int,char **);
              };@

              The extern run function is using QDomDocument and QDomElement objects.

              1 Reply Last reply
              0
              • F Offline
                F Offline
                Franzk
                wrote on last edited by
                #8

                Your MyApp constructor should have an int reference:
                @MyApp(int &, char **)@
                Also, your MyApp constructor should explicitly construct the QApplication using QApplication(int &, char **):
                @MyApp::MyApp(int &argc, char **argv) :
                QApplication(argc, argv)
                {
                }@

                "Horse sense is the thing a horse has which keeps it from betting on people." -- W.C. Fields

                http://www.catb.org/~esr/faqs/smart-questions.html

                1 Reply Last reply
                0
                • G Offline
                  G Offline
                  goetz
                  wrote on last edited by
                  #9

                  This signature of your constructor is wrong:

                  @
                  MyApp(int,char **);
                  @

                  Use exactcly the same as QApplication!

                  And don't forget to include the Q_OBJECT macro.

                  http://www.catb.org/~esr/faqs/smart-questions.html

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

                    Do you really need to Q_OBJECT macro here, Volker? I don't see any use of its facilities here?

                    1 Reply Last reply
                    0
                    • G Offline
                      G Offline
                      goetz
                      wrote on last edited by
                      #11

                      At least if you need some qobject_cast<> later on. And in principle it is a good idea to put the macro in every QObject derived class. Even if you do not need the functionality, it does not harm. And you need not worry about it if you change minds afterwards.

                      http://www.catb.org/~esr/faqs/smart-questions.html

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

                        I thought as much.
                        Not really needed for this, but a good habit to do for every QObject decendant class.

                        1 Reply Last reply
                        0
                        • V Offline
                          V Offline
                          vishwajeet
                          wrote on last edited by
                          #13

                          Good discussion, coming back to main question here.

                          which code is getting executed here on Linux could u check that thru debug statement or some other way?

                          I mean is it

                          @ MyApp app(argc,argv);
                          return app.exec(); // event loop
                          @

                          OR

                          @
                          if (argc == 3) run(argv[1],argv[2]);
                          @

                          And how it is different from Windows execution?

                          Problem seems simple here i guess, its just you have to check the difference between win and Linux in terms of main() code execution, max u might have to go 1 layer down but that should resolve ur problem.

                          Born To Code !!!

                          1 Reply Last reply
                          0
                          • G Offline
                            G Offline
                            goetz
                            wrote on last edited by
                            #14

                            Show us the implementation of your MyApp constructor, please.

                            http://www.catb.org/~esr/faqs/smart-questions.html

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

                              [quote author="vishwajeet" date="1298555161"]
                              Problem seems simple here i guess, its just you have to check the difference between win and Linux in terms of main() code execution, max u might have to go 1 layer down but that should resolve ur problem. [/quote]

                              [Highlighting by me]

                              Can you please use correct english in your writings. It's hard to read these non obvious abbreviations, especially for non-native speakers. This is neither Twitter nor SMS, we do have far more than 140 available :-) so no need to confuse people.

                              http://www.catb.org/~esr/faqs/smart-questions.html

                              1 Reply Last reply
                              0
                              • J Offline
                                J Offline
                                jerome.bouat
                                wrote on last edited by
                                #16

                                Now the MyApp class has the below declaration :
                                @class MyApp : public QApplication
                                {
                                private:

                                Q_OBJECT

                                public:
                                bool tested;
                                QString program;
                                streambuf *coutbuf;
                                virtual ~MyApp();
                                MyApp(int &,char **);
                                };@

                                And below is its definition :
                                @MyApp::MyApp(int &argc,char **argv) : QApplication(argc,argv),program(argv[0]),coutbuf(cout.rdbuf()),tested(false)

                                {

                                MainWindow *mainWindow = new MainWindow(argc,argv);

                                mainWindow->show();

                                }@

                                I recompiled all but I still get the same issue.

                                1 Reply Last reply
                                0
                                • G Offline
                                  G Offline
                                  goetz
                                  wrote on last edited by
                                  #17

                                  It's common to instantiate your UI class in the main function after the QApplication (-derived) object has been created.

                                  I have not tested if that is the cause of your problem, but at least it's common coding style in Qt world.

                                  http://www.catb.org/~esr/faqs/smart-questions.html

                                  1 Reply Last reply
                                  0
                                  • V Offline
                                    V Offline
                                    vishwajeet
                                    wrote on last edited by
                                    #18

                                    Ohhhh i apologies for too many abbreviations in my writing.
                                    [quote author="Volker" date="1298556541"][quote author="vishwajeet" date="1298555161"]
                                    Problem seems simple here i guess, its just you have to check the difference between win and Linux in terms of main() code execution, max u might have to go 1 layer down but that should resolve ur problem. [/quote]

                                    [Highlighting by me]

                                    Can you please use correct english in your writings. It's hard to read these non obvious abbreviations, especially for non-native speakers. This is neither Twitter nor SMS, we do have far more than 140 available :-) so no need to confuse people.
                                    [/quote]

                                    To jerome.bouat

                                    Could you please check if @MyApp app(argc,argv);
                                    return app.exec(); // event loop@ is getting executed in case of windows and Linux ?

                                    Born To Code !!!

                                    1 Reply Last reply
                                    0
                                    • J Offline
                                      J Offline
                                      jerome.bouat
                                      wrote on last edited by
                                      #19

                                      The below code fragment is being executed
                                      on Windows (because the application works properly)
                                      and Linux (because I don't get the error if I comment it) :
                                      @MyApp app(argc,argv);
                                      return app.exec(); // event loop@

                                      I moved the GUI initialization in a separate method (createWindow) :
                                      @class MyApp : public QApplication

                                      {

                                      private:

                                      Q_OBJECT

                                      public:

                                      bool tested;

                                      QString program;

                                      streambuf *coutbuf;

                                      virtual ~MyApp();

                                      // empty, just call super class constructor
                                      // and initialize object attributes

                                      MyApp(int &,char **);

                                      void createWindow(int &,char **);

                                      };@

                                      Into this new method, I don't get the error message
                                      if I comment the "show()" call
                                      @void MyApp::createWindow(int &argc,char **argv)

                                      {

                                      MainWindow *mainWindow = new MainWindow(argc,argv);

                                      mainWindow->show(); // no error if commented

                                      }@

                                      Thus, the issue seems to be located into the super-super class method QWidget::show().

                                      1 Reply Last reply
                                      0
                                      • G Offline
                                        G Offline
                                        goetz
                                        wrote on last edited by
                                        #20

                                        No way to analyze this here. Can you please:

                                        • make a small test case
                                        • put it into a complete project
                                        • make sure it compiles, runs and shows the error
                                        • put the sources (and only these) into a ZIP
                                        • put the ZIP on dropbox, pastebin or make it available somewhere else
                                        • post the link here

                                        http://www.catb.org/~esr/faqs/smart-questions.html

                                        1 Reply Last reply
                                        0
                                        • J Offline
                                          J Offline
                                          jerome.bouat
                                          wrote on last edited by
                                          #21

                                          It seems to be an OpenGL issue but the error message I reported is far from that.

                                          I'm investigating.

                                          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