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. I need some exercises for each chapter
Qt 6.12 LTS is out! See what's new in the release blog

I need some exercises for each chapter

Scheduled Pinned Locked Moved Unsolved General and Desktop
32 Posts 5 Posters 33.3k Views 3 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.
  • jsulmJ jsulm

    @tomy You should not derive your class from Ui::Calculator, instead add a pointer to your class:

    class Calculator : public QDialog
    {
       Q_OBJECT
    public:
       Calculator(QWidget* parent = 0);
    private:
        Ui::Calculator *ui;
    };
    

    You should create a form via "New file or project/Qt designer Form Class" and check how it works. This way it is easier to get started.

    tomyT Offline
    tomyT Offline
    tomy
    wrote on last edited by
    #6

    @jsulm said in I need some exercises for each chapter:

    @tomy You should not derive your class from Ui::Calculator, instead add a pointer to your class:

    Thanks for your reply but what I wrote was according to the method of examples of the book!

    class Calculator : public QDialog
    {
       Q_OBJECT
    public:
       Calculator(QWidget* parent = 0);
    private:
        Ui::Calculator *ui;
    };
    

    You should create a form via "New file or project/Qt designer Form Class" and check how it works. This way it is easier to get started.

    OK, I re-start from there this time, but how to get it worked?

    jsulmJ 1 Reply Last reply
    0
    • tomyT tomy

      @jsulm said in I need some exercises for each chapter:

      @tomy You should not derive your class from Ui::Calculator, instead add a pointer to your class:

      Thanks for your reply but what I wrote was according to the method of examples of the book!

      class Calculator : public QDialog
      {
         Q_OBJECT
      public:
         Calculator(QWidget* parent = 0);
      private:
          Ui::Calculator *ui;
      };
      

      You should create a form via "New file or project/Qt designer Form Class" and check how it works. This way it is easier to get started.

      OK, I re-start from there this time, but how to get it worked?

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

      @tomy Can you show the content of ui_calculator.h?

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

      tomyT 1 Reply Last reply
      1
      • jsulmJ jsulm

        @tomy Can you show the content of ui_calculator.h?

        tomyT Offline
        tomyT Offline
        tomy
        wrote on last edited by
        #8

        @jsulm said in I need some exercises for each chapter:

        ui_calculator.h

        Yes, that's it:

        /********************************************************************************
        ** Form generated from reading UI file 'calculator.ui'
        **
        ** Created by: Qt User Interface Compiler version 5.5.1
        **
        ** WARNING! All changes made in this file will be lost when recompiling UI file!
        ********************************************************************************/
        
        #ifndef UI_CALCULATOR_H
        #define UI_CALCULATOR_H
        
        #include <QtCore/QVariant>
        #include <QtWidgets/QAction>
        #include <QtWidgets/QApplication>
        #include <QtWidgets/QButtonGroup>
        #include <QtWidgets/QDialog>
        #include <QtWidgets/QHeaderView>
        #include <QtWidgets/QLineEdit>
        #include <QtWidgets/QPushButton>
        
        QT_BEGIN_NAMESPACE
        
        class Ui_Dialog
        {
        public:
            QLineEdit *lineEdit;
            QPushButton *oneButton;
            QPushButton *twoButton;
            QPushButton *equalButton;
            QPushButton *quitButton;
            QPushButton *plusButton;
            QPushButton *menusButton;
        
            void setupUi(QDialog *Dialog)
            {
                if (Dialog->objectName().isEmpty())
                    Dialog->setObjectName(QStringLiteral("Dialog"));
                Dialog->resize(400, 300);
                lineEdit = new QLineEdit(Dialog);
                lineEdit->setObjectName(QStringLiteral("lineEdit"));
                lineEdit->setGeometry(QRect(220, 100, 113, 20));
                oneButton = new QPushButton(Dialog);
                oneButton->setObjectName(QStringLiteral("oneButton"));
                oneButton->setGeometry(QRect(40, 90, 75, 23));
                twoButton = new QPushButton(Dialog);
                twoButton->setObjectName(QStringLiteral("twoButton"));
                twoButton->setGeometry(QRect(40, 160, 75, 23));
                equalButton = new QPushButton(Dialog);
                equalButton->setObjectName(QStringLiteral("equalButton"));
                equalButton->setGeometry(QRect(240, 130, 75, 23));
                quitButton = new QPushButton(Dialog);
                quitButton->setObjectName(QStringLiteral("quitButton"));
                quitButton->setGeometry(QRect(240, 190, 75, 23));
                plusButton = new QPushButton(Dialog);
                plusButton->setObjectName(QStringLiteral("plusButton"));
                plusButton->setGeometry(QRect(160, 130, 31, 21));
                menusButton = new QPushButton(Dialog);
                menusButton->setObjectName(QStringLiteral("menusButton"));
                menusButton->setGeometry(QRect(120, 130, 31, 21));
        
                retranslateUi(Dialog);
                QObject::connect(equalButton, SIGNAL(clicked()), Dialog, SLOT(accept()));
                QObject::connect(quitButton, SIGNAL(clicked()), Dialog, SLOT(reject()));
                QObject::connect(oneButton, SIGNAL(clicked()), lineEdit, SLOT(paste()));
                QObject::connect(menusButton, SIGNAL(clicked()), lineEdit, SLOT(paste()));
                QObject::connect(twoButton, SIGNAL(clicked()), lineEdit, SLOT(paste()));
                QObject::connect(plusButton, SIGNAL(clicked()), lineEdit, SLOT(paste()));
        
                QMetaObject::connectSlotsByName(Dialog);
            } // setupUi
        
            void retranslateUi(QDialog *Dialog)
            {
                Dialog->setWindowTitle(QApplication::translate("Dialog", "Calculator", 0));
                oneButton->setText(QApplication::translate("Dialog", "1", 0));
                twoButton->setText(QApplication::translate("Dialog", "2", 0));
                equalButton->setText(QApplication::translate("Dialog", "=", 0));
                quitButton->setText(QApplication::translate("Dialog", "Quit", 0));
                plusButton->setText(QApplication::translate("Dialog", "+", 0));
                menusButton->setText(QApplication::translate("Dialog", "-", 0));
            } // retranslateUi
        
        };
        
        namespace Ui {
            class Dialog: public Ui_Dialog {};
        } // namespace Ui
        
        QT_END_NAMESPACE
        
        #endif // UI_CALCULATOR_H
        
        1 Reply Last reply
        0
        • tomyT Offline
          tomyT Offline
          tomy
          wrote on last edited by
          #9

          Thank you guys. Apparently I will get no help here. I pose the issue on another thread.

          jsulmJ 1 Reply Last reply
          0
          • tomyT tomy

            Thank you guys. Apparently I will get no help here. I pose the issue on another thread.

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

            @tomy The name of your UI class is Dialog not Calculator, so change to:

            class Calculator : public QDialog, public Ui::Dialog
            

            see here from ui_calculator.h:

            namespace Ui {
                class Dialog: public Ui_Dialog {};
            }
            

            "Apparently I will get no help here" - you should be more patient. People here are volunteers.

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

            tomyT 1 Reply Last reply
            1
            • jsulmJ jsulm

              @tomy The name of your UI class is Dialog not Calculator, so change to:

              class Calculator : public QDialog, public Ui::Dialog
              

              see here from ui_calculator.h:

              namespace Ui {
                  class Dialog: public Ui_Dialog {};
              }
              

              "Apparently I will get no help here" - you should be more patient. People here are volunteers.

              tomyT Offline
              tomyT Offline
              tomy
              wrote on last edited by tomy
              #11

              @jsulm
              Yeah, you are right. Thank you for the answer. :)

              On the process of developing the app step-by-step, I made these changes.
              The .uifile:

              alt text

              My main.cpp:

              #include <QApplication>
              #include <QDialog>

              #include "ui_Calculator.h"

              int main(int argc, char* argv[])
              {
                  QApplication app(argc, argv);
              
                  Ui::Calculator ui;
                  QDialog* dialog = new QDialog;
                  ui.setupUi(dialog);
                  dialog -> show();
              
                  return app.exec();
              }
              

              The .h file:

              #ifndef CALCULATOR_H
              #define CALCULATOR_H
              
              #include<QDialog>
              #include "ui_Calculator.h"
              
              class Calculator : public QDialog, public Ui::Calculator
              {
                  Q_OBJECT
              
              public:
                  Calculator(QWidget* parent = 0);
              private slots:
                 void on_lineEdit_textChanged();
              };
              
              #endif // CALCULATOR_H
              

              The .cpp file:

              #include <QtWidgets>
              #include "calculator.h"
              
              Calculator::Calculator(QWidget *parent)
                  :QDialog(parent)
              {
                  setupUi(this);
              
                  connect(oneButton,SIGNAL(clicked(bool)), lineEdit, SLOT(setText("1")));
                  connect(twoButton,SIGNAL(clicked(bool)), lineEdit, SLOT(setText("2")));
                  connect(addButton,SIGNAL(clicked(bool)), lineEdit, SLOT(setText("+")));
              }
              
              void Calculator::on_lineEdit_textChanged() { // I will add some code here
              }
              

              My problems:
              The program runs without errors but there is a red line under each lines of the connect.
              And when I run the app and click on 1, 2 or + button, they will not be shown in lineEdit!
              What are the reasons please?

              1 Reply Last reply
              0
              • mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by
                #12

                Hi
                The reason it do not work is that you say

                connect(twoButton,SIGNAL(clicked(bool)), lineEdit, SLOT(setText("2")));

                The signal should go to a slot with same signature, meaning it should take same parameters
                and you cannot give it "fixed" ones like "2" as it would need to store it for later then and it cannot.
                so
                connect(twoButton,SIGNAL(clicked(bool)), this/"Calculator"/, SLOT(myslot(bool)));

                in myslot could do

                void Calculator::myslot(bool) {
                lineEdit->setText("2");
                }

                1 Reply Last reply
                2
                • tomyT Offline
                  tomyT Offline
                  tomy
                  wrote on last edited by tomy
                  #13

                  Thanks but it didn't work!

                  I even wanted to use the myslot function in a better way, like this:

                  #include <QtWidgets>
                  #include "calculator.h"
                  
                  Calculator::Calculator(QWidget *parent)
                      :QDialog(parent)
                  {
                      setupUi(this);
                  
                      connect(oneButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot("1")));
                      connect(twoButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot("2")));
                      connect(addButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot("+")));
                  }
                  
                  void Calculator::on_lineEdit_textChanged() {// I will add some code here
                  }
                  
                  void Calculator::myslot(const QString& str){
                      lineEdit -> setText(str);
                  }
                  

                  But this one too didn't work. That is, when I run the app, clicking the 1, 2, + write nothing in the lineEdit.

                  PS: In the Calculator.h:

                  ...
                  private slots:
                     void on_lineEdit_textChanged();
                     void myslot(const QString&);
                  };
                  

                  PS2: The red lines under the connects exist still!

                  1 Reply Last reply
                  0
                  • mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by mrjj
                    #14
                    • PS2: The red lines under the connects exist still!

                    Well
                    connect(oneButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot("1")));

                    Cannot work. Its not valid and will never work.
                    You cannot use it like that. "1" is not used, not valid and it do not work like this.
                    please read
                    http://doc.qt.io/qt-5/signalsandslots.html

                    Please note:
                    connect return true and false , so please do

                    qDebug () << "one:" << connect(oneButton,SIGNAL(clicked(bool)), lineEdit, SLOT(setText("1")));

                    You will see it says "one:false" and wont accept it.

                    You might want to look into
                    http://doc.qt.io/qt-5/qsignalmapper.html#details

                    1 Reply Last reply
                    1
                    • tomyT Offline
                      tomyT Offline
                      tomy
                      wrote on last edited by
                      #15

                      I read the first link until "Advanced Signal & Slot ..." part but couldn't find the reason. According to C++ conventions what I wrote seems quite right. And if you think it's not in Qt, speak about the reason please.

                      connect(oneButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot(bool)));
                      

                      &

                      void Calculator::myslot(){
                          lineEdit -> setText("1");
                      }
                      

                      also show nothing in lineEdit!

                      jsulmJ 1 Reply Last reply
                      0
                      • mrjjM Offline
                        mrjjM Offline
                        mrjj
                        Lifetime Qt Champion
                        wrote on last edited by mrjj
                        #16

                        Hi

                        • According to C++ conventions what I wrote seems quite right:

                        connect(oneButton,SIGNAL(clicked(bool)), lineEdit, SLOT(setText("1")));
                        This is wrong for the SLOT macro.

                        The new code you show is correct.
                        connect(oneButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot(bool))); << no "1" just the type

                        void Calculator::myslot(bool){
                        lineEdit -> setText("1"); // correct. for normal Qt , it would be ui->lineEdit->setText.
                        }

                        1 Reply Last reply
                        0
                        • tomyT tomy

                          I read the first link until "Advanced Signal & Slot ..." part but couldn't find the reason. According to C++ conventions what I wrote seems quite right. And if you think it's not in Qt, speak about the reason please.

                          connect(oneButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot(bool)));
                          

                          &

                          void Calculator::myslot(){
                              lineEdit -> setText("1");
                          }
                          

                          also show nothing in lineEdit!

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

                          @tomy You should check what connect(...) returns. My guess is that the connection fails because in the connect you have:

                          SLOT(myslot(bool))
                          

                          but your slot does not have any parameter:

                          void Calculator::myslot()
                          

                          So, connect(...) cannot find slot myslot(bool)

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

                          tomyT 1 Reply Last reply
                          3
                          • jsulmJ jsulm

                            @tomy You should check what connect(...) returns. My guess is that the connection fails because in the connect you have:

                            SLOT(myslot(bool))
                            

                            but your slot does not have any parameter:

                            void Calculator::myslot()
                            

                            So, connect(...) cannot find slot myslot(bool)

                            tomyT Offline
                            tomyT Offline
                            tomy
                            wrote on last edited by tomy
                            #18

                            Thanks to all.
                            @jsulm
                            So apparently you disagree with mrjj. I write what he says but the code shows nothing. I think your assumption is correct because myslot() has no parameters.

                            Now the question is this: How to connect the buttons (1, 2 & +) to a slot so that, that slot prints out the values of these buttons onto the lineEdit please?

                            Based on what I'd learned form C++ I thought the code below would work for that purpose:

                            in the Calculator.h:

                            ...
                            private slots:
                               void myslot(const QString&);
                            };
                            

                            And in Calculator.cpp:

                            ...
                            connect(oneButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot("1")));
                             connect(twoButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot("2")));
                             connect(addButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot("+")));
                            }
                            
                            void Calculator::myslot(const QString& str){
                             lineEdit -> setText(str);
                            }
                            

                            But this does not work. I have a good experience in C++ but I'm a novice in Qt.
                            Now what would be your solution for that purpose please?

                            jsulmJ 1 Reply Last reply
                            0
                            • tomyT tomy

                              Thanks to all.
                              @jsulm
                              So apparently you disagree with mrjj. I write what he says but the code shows nothing. I think your assumption is correct because myslot() has no parameters.

                              Now the question is this: How to connect the buttons (1, 2 & +) to a slot so that, that slot prints out the values of these buttons onto the lineEdit please?

                              Based on what I'd learned form C++ I thought the code below would work for that purpose:

                              in the Calculator.h:

                              ...
                              private slots:
                                 void myslot(const QString&);
                              };
                              

                              And in Calculator.cpp:

                              ...
                              connect(oneButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot("1")));
                               connect(twoButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot("2")));
                               connect(addButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot("+")));
                              }
                              
                              void Calculator::myslot(const QString& str){
                               lineEdit -> setText(str);
                              }
                              

                              But this does not work. I have a good experience in C++ but I'm a novice in Qt.
                              Now what would be your solution for that purpose please?

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

                              @tomy Where did I disagree with @mrjj?
                              You should read more carefully what I wrote.
                              The problem with your code is that you provide a wrong slot signature in connect. Again:

                              SLOT(myslot(bool))
                              

                              there is no such slot! Your slot has this signature (no bool parameter):

                              void Calculator::myslot()
                              

                              So, either change

                              SLOT(myslot(bool))
                              to
                              SLOT(myslot())
                              

                              or

                              void Calculator::myslot()
                              to
                              void Calculator::myslot(bool)
                              

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

                              tomyT 1 Reply Last reply
                              1
                              • jsulmJ jsulm

                                @tomy Where did I disagree with @mrjj?
                                You should read more carefully what I wrote.
                                The problem with your code is that you provide a wrong slot signature in connect. Again:

                                SLOT(myslot(bool))
                                

                                there is no such slot! Your slot has this signature (no bool parameter):

                                void Calculator::myslot()
                                

                                So, either change

                                SLOT(myslot(bool))
                                to
                                SLOT(myslot())
                                

                                or

                                void Calculator::myslot()
                                to
                                void Calculator::myslot(bool)
                                
                                tomyT Offline
                                tomyT Offline
                                tomy
                                wrote on last edited by
                                #20

                                @jsulm

                                OK & thanks a bunch but still it doesn't work!

                                1 Reply Last reply
                                0
                                • tomyT Offline
                                  tomyT Offline
                                  tomy
                                  wrote on last edited by
                                  #21

                                  I appreciate your time that you all dedicate to help me but is it that hard to write a function that has a string parameter so that when we call it by strings it prints out the sent string onto the lineEdit?

                                  jsulmJ 1 Reply Last reply
                                  0
                                  • tomyT tomy

                                    I appreciate your time that you all dedicate to help me but is it that hard to write a function that has a string parameter so that when we call it by strings it prints out the sent string onto the lineEdit?

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

                                    @tomy If you say "does not work" you should say what does not work or what happens.
                                    You should really read about signals/slots.

                                    You could use lambdas (C++11) and new connect syntax like this:

                                    connect(oneButton, &QPushButton::clicked, []() { lineEdit->setText("1"); });
                                    

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

                                    1 Reply Last reply
                                    1
                                    • tomyT Offline
                                      tomyT Offline
                                      tomy
                                      wrote on last edited by
                                      #23
                                      This post is deleted!
                                      1 Reply Last reply
                                      0
                                      • tomyT Offline
                                        tomyT Offline
                                        tomy
                                        wrote on last edited by tomy
                                        #24

                                        I meant using neither:

                                        connect(oneButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot("1")));

                                        void Calculator::myslot(const QString& str){
                                        lineEdit -> setText(str);
                                        }
                                        Nor:

                                        connect(oneButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot(bool)));

                                        void Calculator::myslot(bool){
                                        lineEdit -> setText("1");
                                        }
                                        And Nor:

                                        connect(oneButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot()));

                                        void Calculator::myslot(){
                                        lineEdit -> setText("1");
                                        }
                                        the program works!

                                        That is when I each time using the above methods run the code and click on the buttons, nothing will be printed out onto the lineEdit, that is clicking the buttons do nothing.

                                        Now you say I should read about:
                                        lambdas (C++11) and new connect syntax like this:
                                        connect(oneButton, &QPushButton::clicked, { lineEdit->setText("1"); });

                                        BUT THESE ARE VERY ADVANCED FOR ME. AT THE BEGINING OF THIS THREAD I SAID I NEED SOME PROPER EXERCISE FOR WHAT I HAVE LEARNED THROUGH THESE 2 CHAPTERS OF THAT BOOK, NOT ADVANCED TOPICS THAT ARE IN THE NEXT CHAPTERS OF THE BOOK.

                                        jsulmJ 1 Reply Last reply
                                        0
                                        • tomyT tomy

                                          I meant using neither:

                                          connect(oneButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot("1")));

                                          void Calculator::myslot(const QString& str){
                                          lineEdit -> setText(str);
                                          }
                                          Nor:

                                          connect(oneButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot(bool)));

                                          void Calculator::myslot(bool){
                                          lineEdit -> setText("1");
                                          }
                                          And Nor:

                                          connect(oneButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot()));

                                          void Calculator::myslot(){
                                          lineEdit -> setText("1");
                                          }
                                          the program works!

                                          That is when I each time using the above methods run the code and click on the buttons, nothing will be printed out onto the lineEdit, that is clicking the buttons do nothing.

                                          Now you say I should read about:
                                          lambdas (C++11) and new connect syntax like this:
                                          connect(oneButton, &QPushButton::clicked, { lineEdit->setText("1"); });

                                          BUT THESE ARE VERY ADVANCED FOR ME. AT THE BEGINING OF THIS THREAD I SAID I NEED SOME PROPER EXERCISE FOR WHAT I HAVE LEARNED THROUGH THESE 2 CHAPTERS OF THAT BOOK, NOT ADVANCED TOPICS THAT ARE IN THE NEXT CHAPTERS OF THE BOOK.

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

                                          @tomy I already suggested to check what connect(...) returns to see whether it works or not. Did you try it?

                                          qDebug() << connect(oneButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot(bool)));
                                          

                                          it should print true if it succeeded.

                                          This connect call is wrong:

                                          connect(oneButton,SIGNAL(clicked(bool)), lineEdit, SLOT(myslot(bool)));
                                          

                                          lineEdit is QLineEdit, right? QLineEdit does not have a slot named "myslot(bool)". This slot is in your Calculator class, right?
                                          Then it should be:

                                          connect(oneButton,SIGNAL(clicked(bool)), this, SLOT(myslot(bool)));
                                          

                                          connect() will print a warning if it cannot do the connection - you can check "Application output" tab in QtCreator.
                                          Furthermore you can try to debug: set a break point inside the slot run your app with debugger (F5 in QtCreator), press the button and see whether the slot is called or not.

                                          You wrote "I have a good experience in C++", so I assumed you're familiar with lambdas as they were introduced in C++11. And in your current use case they are very handy.

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

                                          tomyT 1 Reply Last reply
                                          2

                                          • Login

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