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. Another "change qt application language at runtime" thread.
QtWS25 Last Chance

Another "change qt application language at runtime" thread.

Scheduled Pinned Locked Moved General and Desktop
50 Posts 4 Posters 31.9k 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.
  • BilbonSacquetB Offline
    BilbonSacquetB Offline
    BilbonSacquet
    wrote on last edited by
    #18

    hmm .. which compiler are you using ?

    1 Reply Last reply
    0
    • M Offline
      M Offline
      maxmotor
      wrote on last edited by
      #19

      mingw

      1 Reply Last reply
      0
      • BilbonSacquetB Offline
        BilbonSacquetB Offline
        BilbonSacquet
        wrote on last edited by
        #20

        you could try to replace 'template <class T>' by 'template <typename T>'

        1 Reply Last reply
        0
        • M Offline
          M Offline
          maxmotor
          wrote on last edited by
          #21

          No change :(

          1 Reply Last reply
          0
          • BilbonSacquetB Offline
            BilbonSacquetB Offline
            BilbonSacquet
            wrote on last edited by
            #22

            and for no warnings compilation add: Q_UNUSED(obj); into the enventFilter()

            1 Reply Last reply
            0
            • M Offline
              M Offline
              maxmotor
              wrote on last edited by
              #23

              But the error happens before this? I have only written:

              @template <class T>
              class MyTranslation : public QObject
              {
              T* m_t;

              public:
              MyTranslation() : m_t(0) {}
              ~MyTranslation() { if (m_t) m_t->QWidget::removeEventFilter(this); m_t = 0; }
              };@

              And it gives the error...

              1 Reply Last reply
              0
              • BilbonSacquetB Offline
                BilbonSacquetB Offline
                BilbonSacquet
                wrote on last edited by
                #24

                I have found some help in internet, seems that your interface (eclipse) not the compiler the problem.

                "here some indication":stackoverflow.com/questions/6503551/opencv-type-iplimage-could-not-be-resolved

                1 Reply Last reply
                0
                • M Offline
                  M Offline
                  maxmotor
                  wrote on last edited by
                  #25

                  Thank you :)

                  I wrote the code in Qt Creator instead of Eclipse, and no errors appear in the MyTranslation.h file.

                  I am now trying to set up the "MyWidget.h" file.

                  First of all I can't inherit from Ui::MyWidget. Can this have something to do with MyWidget being a base class for all my ui's?

                  Secondly, if I leave out Ui::MyWidget, but inherit from MyTranslation<MyWidget>, my ui's seems to get errors, when it comes to the signal and slot connections made.

                  "reference to 'connect' is ambiguous"

                  1 Reply Last reply
                  0
                  • BilbonSacquetB Offline
                    BilbonSacquetB Offline
                    BilbonSacquet
                    wrote on last edited by
                    #26

                    If you couldn't inherits from the Ui::MyWidget you should adapt the code in the handler to find the restranslateUI(), or move the retranslateUI() call in the translationChanged() function.

                    yes, because you have 2x QObject inheritence. Use at the place the on_awidget_asignal() slots or in this case use QWidget::connect().

                    1 Reply Last reply
                    0
                    • M Offline
                      M Offline
                      maxmotor
                      wrote on last edited by
                      #27

                      I'm sorry, I don't quite understand what you are saying? :(

                      1 Reply Last reply
                      0
                      • BilbonSacquetB Offline
                        BilbonSacquetB Offline
                        BilbonSacquet
                        wrote on last edited by
                        #28

                        Sorry, regarding the way I do multiple inheritence, you could find help in the Qt documentation: "Using a Design UI File in Your Application", pay a look to the last chapter:"Automatic Connections".

                        1 Reply Last reply
                        0
                        • M Offline
                          M Offline
                          maxmotor
                          wrote on last edited by
                          #29

                          The link you gave me says

                          @QMetaObject::connectSlotsByName(this);@

                          Gives me this error: “'QObject' is an ambiguous base of 'MyWidget'”

                          • But you use QWidget:: Is there a reason for this?
                          1 Reply Last reply
                          0
                          • G Offline
                            G Offline
                            goetz
                            wrote on last edited by
                            #30

                            You inherit twice from QObject:

                            @
                            class MyTranslation : public QObject
                            class MyWidget: public QWidget, public Ui::MyWidget, public MyTranslation<MyWidget>
                            @

                            So you inherit from QObject via QWidget (which is a QObject subclass) and via MyTranslation. This is not supported!

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

                            1 Reply Last reply
                            0
                            • M Offline
                              M Offline
                              maxmotor
                              wrote on last edited by
                              #31

                              BilbonSacquet you must have met this problem then?

                              1 Reply Last reply
                              0
                              • BilbonSacquetB Offline
                                BilbonSacquetB Offline
                                BilbonSacquet
                                wrote on last edited by
                                #32

                                It's supported, you should simply take care of the conflict. But we could do it through delegations (I take in consideration all what we say):

                                @
                                #include <QtCore/QObject>

                                template <class T>
                                class MyTranslator : public QObject
                                {
                                T* m_t;

                                public:
                                MyTranslator(T* widget)
                                : m_t(widget)
                                {
                                m_t->installEventFilter(this);
                                }

                                ~MyTranslator() 
                                { 
                                    m_t->removeEventFilter(this); 
                                }
                                
                                bool eventFilter(QObject *obj, QEvent *event)
                                {
                                    Q_UNUSED(obj);
                                
                                    if (m_t && event->type() == QEvent::LanguageChange)
                                    { 
                                        // not automatally retranslation
                                        m_t->T:translationChanged();
                                    }
                                    return false;
                                }
                                

                                };

                                #include <QtGui/QWidget>

                                #include <ui_MyWidget.h>
                                #include <MyTranslator.h>

                                class MyWidget: public QWidget
                                {
                                Q_OBJECT

                                public:
                                    MyWidget(QWidget* parent = 0)
                                    : QWidget(parent), 
                                      m_translator(this)
                                    {
                                        ui.setupUi(this);
                                    }
                                
                                    virtual ~MyWidget() {}
                                
                                    virtual void translationChanged()
                                    {
                                        ui.restranslateUi();
                                
                                        qWarning() << "translator changed";
                                    }
                                
                                private:
                                    MyTranslator<MyWidget> m_translator;
                                    Ui::MyWidget ui;
                                

                                };
                                @

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

                                  The "docs of moc":http://doc.qt.nokia.com/4.7/moc.html#multiple-inheritance-requires-qobject-to-be-first state it clearly:

                                  bq. Multiple Inheritance Requires QObject to Be First
                                  If you are using multiple inheritance, moc assumes that the first inherited class is a subclass of QObject. Also, be sure that only the first inherited class is a QObject.
                                  [emphasis by me, Volker]

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

                                  1 Reply Last reply
                                  0
                                  • M Offline
                                    M Offline
                                    maxmotor
                                    wrote on last edited by
                                    #34

                                    But now you don't inherit from MyTranslator, in the code you just postet?

                                    1 Reply Last reply
                                    0
                                    • BilbonSacquetB Offline
                                      BilbonSacquetB Offline
                                      BilbonSacquet
                                      wrote on last edited by
                                      #35

                                      Yes, I do both variation (just for you)!

                                      The inherited and the delegated! Both are correct ... just now choose the one you want :).

                                      1 Reply Last reply
                                      0
                                      • BilbonSacquetB Offline
                                        BilbonSacquetB Offline
                                        BilbonSacquet
                                        wrote on last edited by
                                        #36

                                        Even the multiple inherited is correct because (to take the sitation of Volker) the first inherited IS a QObject (QWidget is a QObject)!! :)

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

                                          [quote author="BilbonSacquet" date="1321629111"]Even the multiple inherited is correct because (to take the sitation of Volker) the first inherited IS a QObject (QWidget is a QObject)!! :)[/quote]

                                          Don't pick what you want to have and leave out the annoying details that make your design fail!

                                          bq. Also, be sure that only the first inherited class is a QObject.

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

                                          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