Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Advice about the application I will be making? (I'm a beginner)
Forum Updated to NodeBB v4.3 + New Features

Advice about the application I will be making? (I'm a beginner)

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
77 Posts 6 Posters 25.0k Views 2 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.
  • mrjjM Offline
    mrjjM Offline
    mrjj
    Lifetime Qt Champion
    wrote on last edited by
    #19

    Hi
    Last table looks ok. I assume then all question is a topic and the answer is some
    text. No mutiple choice or anything like that ?

    Since we will have few questions (75) its ok to include the difficult_level
    as text. If we were to have thousands of questions, it would be better to have a table for the texts ( Beginner, Average etc) and reference it from Question table.
    However, we just directly included it here for simplicity.

    Next step could be to try use table in Qt
    https://doc.qt.io/qt-5/qtsql-index.html
    https://katecpp.wordpress.com/2015/08/28/sqlite-with-qt/

    Things to consider:
    Define the operations you need, like
    select questions from a diff_level
    keeping track of already used questions (if needed ?)

    D 1 Reply Last reply
    6
    • D dvlpr.bernard

      @mrjj Good day sir!

      I was just wondering how am I going to present the data? Should I store all the interface in one Stack Widget or do I need another window or another Stack Widget? :)

      And also I consider looking at SQLite. Where would I store the questions kinda thing or the output to compare to the user input? Thank you again in advance :)
      0_1555859866247_0c9e3a4f-a3af-45bd-8af3-b4e50e870d9c-image.png

      KillerSmathK Offline
      KillerSmathK Offline
      KillerSmath
      wrote on last edited by
      #20

      I was just wondering how am I going to present the data? Should I store all the interface in one Stack Widget or do I need another window or another Stack Widget? :)

      I suppose you pretent to use QML. So you can store the data in a model and display components on window depending of your data.

      Swipe View
      Stack View

      Below is a idea of how you could to implement it with Swipe View (No Interative Mode)

      // Qt 5.11
      import QtQuick 2.11
      import QtQuick.Window 2.11
      import QtQuick.Controls 2.2
      import QtQuick.Layouts 1.11
      
      Window {
          visible: true
          width: 640
          height: 480
          title: qsTr("Hello World")
      
          ListModel{
              id: databaseModel
              ListElement{
                  topic: "While Loop"
                  dificulty: 3
                  question_num: 3
                  question_text: "While Loop 3,3"
              }
      
              ListElement{
                  topic: "While Loop"
                  dificulty: 3
                  question_num: 4
                  question_text: "While Loop 3,4"
              }
          }
      
          SwipeView {
              id: view
              anchors.fill: parent
              anchors.bottomMargin: 20
              interactive: false
              currentIndex: pageIndicator.currentIndex
              Repeater {
                  model: databaseModel
                  Loader {
                      active: SwipeView.isCurrentItem || SwipeView.isNextItem || SwipeView.isPreviousItem
                      sourceComponent: Page{
                          Rectangle{
                              width: view.width / 2
                              height: view.height / 2
                              color: "white"
                              anchors.centerIn: parent
      
                              Text{
                                  anchors.centerIn: parent
                                  text: "Question: " + model.question_text
                              }
                          }
                      }
                  }
              }
          }
      
          PageIndicator {
              id: pageIndicator
              count: databaseModel.count
              interactive: true
              currentIndex: 0
              anchors.bottom: parent.bottom
              anchors.horizontalCenter: parent.horizontalCenter
      
          }
      
      }
      

      Note: the listModel (Data) and Game Logic can be implemented from c++.

      And also I consider looking at SQLite. Where would I store the questions kinda thing or the output to compare to the user input? Thank you again in advance :)

      Firstly, it may be implement of several ways...
      You can insert a Json text with correct_answer index and answers.
      Or create an array of text and correct_answer field (i'm not sure how it could be implemented).

      Json Example:

      {
         "correct_answer": 0,
         "answers": [
            "Answer 1",
            "Answer 2",
            "Answer 3"
         ]
      }
      

      Also, the difficulty_level don't need to be a string field. You can storage an intenger number 1-3 and interpret it in your app. 1 -> Beginner, 2 -> Intermediate.

      I recommend you to read these materials to understand the Relational Database Concepts:
      Telvents - RDBMS Concepts
      TutorialsPoint - RDBMS Concepts

      @Computer Science Student - Brazil
      Web Developer and Researcher
      “Sometimes it’s the people no one imagines anything of who do the things that no one can imagine.” - Alan Turing

      D 1 Reply Last reply
      2
      • mrjjM mrjj

        Hi
        Last table looks ok. I assume then all question is a topic and the answer is some
        text. No mutiple choice or anything like that ?

        Since we will have few questions (75) its ok to include the difficult_level
        as text. If we were to have thousands of questions, it would be better to have a table for the texts ( Beginner, Average etc) and reference it from Question table.
        However, we just directly included it here for simplicity.

        Next step could be to try use table in Qt
        https://doc.qt.io/qt-5/qtsql-index.html
        https://katecpp.wordpress.com/2015/08/28/sqlite-with-qt/

        Things to consider:
        Define the operations you need, like
        select questions from a diff_level
        keeping track of already used questions (if needed ?)

        D Offline
        D Offline
        dvlpr.bernard
        wrote on last edited by
        #21

        @mrjj
        Good day!
        Yes, there is no multiple choice included. The user is required to type the output of the set of code that will be displayed.

        As of now, this is how I visualize the logic or the structure of the app (Please let me know if there are some weaknesses or if this will not gonna work or if there is a better way of doing it):

        1. The user will need to choose and click the button(topic name) which has the code that will declare the variable or an object(I don't know what should I use) and will store a data in it.
          Example: When the user click the If Statement then int Topic = 1 or string Topic = "IF";

        2. When the user click the Beginner button then int Dif_Lvl = 1 or string Dif_Lvl= "Beginner";

        3. When the user input the number and click Next button then int Number_Of_Questions = user_input;
          Print_Question(Topic, Dif_Lvl, Number_Of_Questions);
          The Print_Question function contains the query and a loop to display the next pages depending on the user topic/dif_lvl.

        Do I need objects and classes (not that familiar with that) or mostly I would use functions?

        0_1555948631684_414b12ee-58f3-411b-b62a-67e630a2173d-image.png

        Thanks :)

        1 Reply Last reply
        0
        • KillerSmathK KillerSmath

          I was just wondering how am I going to present the data? Should I store all the interface in one Stack Widget or do I need another window or another Stack Widget? :)

          I suppose you pretent to use QML. So you can store the data in a model and display components on window depending of your data.

          Swipe View
          Stack View

          Below is a idea of how you could to implement it with Swipe View (No Interative Mode)

          // Qt 5.11
          import QtQuick 2.11
          import QtQuick.Window 2.11
          import QtQuick.Controls 2.2
          import QtQuick.Layouts 1.11
          
          Window {
              visible: true
              width: 640
              height: 480
              title: qsTr("Hello World")
          
              ListModel{
                  id: databaseModel
                  ListElement{
                      topic: "While Loop"
                      dificulty: 3
                      question_num: 3
                      question_text: "While Loop 3,3"
                  }
          
                  ListElement{
                      topic: "While Loop"
                      dificulty: 3
                      question_num: 4
                      question_text: "While Loop 3,4"
                  }
              }
          
              SwipeView {
                  id: view
                  anchors.fill: parent
                  anchors.bottomMargin: 20
                  interactive: false
                  currentIndex: pageIndicator.currentIndex
                  Repeater {
                      model: databaseModel
                      Loader {
                          active: SwipeView.isCurrentItem || SwipeView.isNextItem || SwipeView.isPreviousItem
                          sourceComponent: Page{
                              Rectangle{
                                  width: view.width / 2
                                  height: view.height / 2
                                  color: "white"
                                  anchors.centerIn: parent
          
                                  Text{
                                      anchors.centerIn: parent
                                      text: "Question: " + model.question_text
                                  }
                              }
                          }
                      }
                  }
              }
          
              PageIndicator {
                  id: pageIndicator
                  count: databaseModel.count
                  interactive: true
                  currentIndex: 0
                  anchors.bottom: parent.bottom
                  anchors.horizontalCenter: parent.horizontalCenter
          
              }
          
          }
          

          Note: the listModel (Data) and Game Logic can be implemented from c++.

          And also I consider looking at SQLite. Where would I store the questions kinda thing or the output to compare to the user input? Thank you again in advance :)

          Firstly, it may be implement of several ways...
          You can insert a Json text with correct_answer index and answers.
          Or create an array of text and correct_answer field (i'm not sure how it could be implemented).

          Json Example:

          {
             "correct_answer": 0,
             "answers": [
                "Answer 1",
                "Answer 2",
                "Answer 3"
             ]
          }
          

          Also, the difficulty_level don't need to be a string field. You can storage an intenger number 1-3 and interpret it in your app. 1 -> Beginner, 2 -> Intermediate.

          I recommend you to read these materials to understand the Relational Database Concepts:
          Telvents - RDBMS Concepts
          TutorialsPoint - RDBMS Concepts

          D Offline
          D Offline
          dvlpr.bernard
          wrote on last edited by
          #22

          @KillerSmath
          Good day! Thank you for your response.
          As of now, I have not learned QML yet. I only know the basic of QT Widget Application and I also tried the Stack Widget in it. QML seems pretty daunting to me for now but I will consider peeking and see if I could work on it.

          Sadly I need to finish this app within 3 weeks from now or else I would not meet the deadline. I think I wouldn't be able to dig deep into things because that would eat up my time.

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

            @dvlpr.bernard said in Advice about the application I will be making? (I'm a beginner):

            Do I need objects and classes (not that familiar with that) or mostly I would use functions?

            You will be mostly used classes since all Widgets are classes.
            the Print_Question should be a member function to the MainWindow so
            it can access the widgets. You can use QLabel for the topic (call setText on it)
            and QPlainTextEdit for the user / answer input.
            The design looks fine. You can realize it with a stacked widget.

            for both the Topic and Level selection, you have 2 options.
            1: as soon as the user click button, its selected and page is changed.
            2: You set Checkable on the buttons, so they are like a checkbox ( can be selected) and
            first when user press next, the page is changed.

            D 1 Reply Last reply
            2
            • mrjjM mrjj

              @dvlpr.bernard said in Advice about the application I will be making? (I'm a beginner):

              Do I need objects and classes (not that familiar with that) or mostly I would use functions?

              You will be mostly used classes since all Widgets are classes.
              the Print_Question should be a member function to the MainWindow so
              it can access the widgets. You can use QLabel for the topic (call setText on it)
              and QPlainTextEdit for the user / answer input.
              The design looks fine. You can realize it with a stacked widget.

              for both the Topic and Level selection, you have 2 options.
              1: as soon as the user click button, its selected and page is changed.
              2: You set Checkable on the buttons, so they are like a checkbox ( can be selected) and
              first when user press next, the page is changed.

              D Offline
              D Offline
              dvlpr.bernard
              wrote on last edited by
              #24

              @mrjj
              Good day!

              Is it possible to store a long string in SQLite database or maybe an image? I need it for the questions or do I?

              0_1556191665411_732ce764-c6ca-43bb-9503-7d7f32a626a5-image.png

              mrjjM 1 Reply Last reply
              0
              • D dvlpr.bernard

                @mrjj
                Good day!

                Is it possible to store a long string in SQLite database or maybe an image? I need it for the questions or do I?

                0_1556191665411_732ce764-c6ca-43bb-9503-7d7f32a626a5-image.png

                mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by
                #25

                Hi
                Storing text in Sqllite should just work. use the TEXT type for the column.

                Im not sure what you would need any images for ?

                D 1 Reply Last reply
                0
                • mrjjM mrjj

                  Hi
                  Storing text in Sqllite should just work. use the TEXT type for the column.

                  Im not sure what you would need any images for ?

                  D Offline
                  D Offline
                  dvlpr.bernard
                  wrote on last edited by
                  #26

                  Okay, did you mean this string? I already tried it but it didn't work I think it is one liner meaning I can't put two or more line data.

                  0_1556192247323_cb9def4a-6675-4b99-9615-d7151c9d178c-image.png

                  I want store an image to make it look more a real code rather than just a plain text, but if it is not possible thats fine.
                  0_1556192503849_c8f12403-d6c9-48af-bb84-37ba1b9cdfa5-image.png

                  mrjjM 1 Reply Last reply
                  0
                  • D dvlpr.bernard

                    Okay, did you mean this string? I already tried it but it didn't work I think it is one liner meaning I can't put two or more line data.

                    0_1556192247323_cb9def4a-6675-4b99-9615-d7151c9d178c-image.png

                    I want store an image to make it look more a real code rather than just a plain text, but if it is not possible thats fine.
                    0_1556192503849_c8f12403-d6c9-48af-bb84-37ba1b9cdfa5-image.png

                    mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by
                    #27

                    @dvlpr.bernard
                    where you have string, if u open drop down, there is not TEXT type ?

                    ahh. that way.
                    well we can fix that later with a syntax highlighter
                    https://doc.qt.io/qt-5/qtwidgets-richtext-syntaxhighlighter-example.html
                    so when we set text texts its formatted with colors. no need to store image of it.

                    D 1 Reply Last reply
                    2
                    • mrjjM mrjj

                      @dvlpr.bernard
                      where you have string, if u open drop down, there is not TEXT type ?

                      ahh. that way.
                      well we can fix that later with a syntax highlighter
                      https://doc.qt.io/qt-5/qtwidgets-richtext-syntaxhighlighter-example.html
                      so when we set text texts its formatted with colors. no need to store image of it.

                      D Offline
                      D Offline
                      dvlpr.bernard
                      wrote on last edited by
                      #28

                      @mrjj
                      Uhhmm I see, I need to use Text rather than string.
                      Thank you, thank you!

                      mrjjM 1 Reply Last reply
                      0
                      • D dvlpr.bernard

                        @mrjj
                        Uhhmm I see, I need to use Text rather than string.
                        Thank you, thank you!

                        mrjjM Offline
                        mrjjM Offline
                        mrjj
                        Lifetime Qt Champion
                        wrote on last edited by
                        #29

                        @dvlpr.bernard
                        string is a way to optimize the db so one can set a fixed size so if all text is within that, its more efficient, however, for your case with 75 questions. just use TEXT type.

                        D 1 Reply Last reply
                        1
                        • mrjjM mrjj

                          @dvlpr.bernard
                          string is a way to optimize the db so one can set a fixed size so if all text is within that, its more efficient, however, for your case with 75 questions. just use TEXT type.

                          D Offline
                          D Offline
                          dvlpr.bernard
                          wrote on last edited by
                          #30

                          @mrjj
                          Sir. Just wondering how can I access the string value from other functions? I want to use it in other functions.

                          0_1556204335320_ff86f8e5-34df-453a-887c-a9a1f3df8d9f-image.png

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

                            Hi
                            what string do you mean ?
                            The Topic column string from the data base ?

                            D 1 Reply Last reply
                            2
                            • mrjjM mrjj

                              Hi
                              what string do you mean ?
                              The Topic column string from the data base ?

                              D Offline
                              D Offline
                              dvlpr.bernard
                              wrote on last edited by
                              #32

                              @mrjj Hello, no. I mean the QString ch_topic whenever the user chooses a topic. How I'm going to get the ch_topic in order to use it in other functions?

                              mrjjM 1 Reply Last reply
                              0
                              • D dvlpr.bernard

                                @mrjj Hello, no. I mean the QString ch_topic whenever the user chooses a topic. How I'm going to get the ch_topic in order to use it in other functions?

                                mrjjM Offline
                                mrjjM Offline
                                mrjj
                                Lifetime Qt Champion
                                wrote on last edited by mrjj
                                #33

                                @dvlpr.bernard
                                Hi
                                Just store in main window class.
                                All the data you want to be shared between functions should be part of MainWindow. (in .h)
                                At least stuff like selected Topic etc.

                                D 1 Reply Last reply
                                1
                                • mrjjM mrjj

                                  @dvlpr.bernard
                                  Hi
                                  Just store in main window class.
                                  All the data you want to be shared between functions should be part of MainWindow. (in .h)
                                  At least stuff like selected Topic etc.

                                  D Offline
                                  D Offline
                                  dvlpr.bernard
                                  wrote on last edited by
                                  #34

                                  @mrjj
                                  Hello, Hmm didn't know why this is happening. What I did wrong?

                                  0_1556212301978_004fed1f-b35c-473b-ac23-46e096ec3041-image.png
                                  0_1556212325470_a4634d6a-f4a2-4b72-a254-2cd4b79ab393-image.png

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

                                    Hi
                                    You say get_ch_topic is of type MainWindow ???
                                    Should it not QString ?
                                    Or do you mean it should be a function to return
                                    the ch_topic ?
                                    In any case, type of MainWindow just seems wrong.

                                    D 1 Reply Last reply
                                    1
                                    • mrjjM mrjj

                                      Hi
                                      You say get_ch_topic is of type MainWindow ???
                                      Should it not QString ?
                                      Or do you mean it should be a function to return
                                      the ch_topic ?
                                      In any case, type of MainWindow just seems wrong.

                                      D Offline
                                      D Offline
                                      dvlpr.bernard
                                      wrote on last edited by
                                      #36

                                      @mrjj
                                      I don't know. But I want to define a global object so that other functions can use it. But I just don't know where to declare it

                                      mrjjM 1 Reply Last reply
                                      0
                                      • D dvlpr.bernard

                                        @mrjj
                                        I don't know. But I want to define a global object so that other functions can use it. But I just don't know where to declare it

                                        mrjjM Offline
                                        mrjjM Offline
                                        mrjj
                                        Lifetime Qt Champion
                                        wrote on last edited by
                                        #37

                                        @dvlpr.bernard
                                        Hi
                                        Just like the
                                        QString ch_topic;
                                        Then all member functions have access to it as they are part of the class.

                                        D 1 Reply Last reply
                                        1
                                        • mrjjM mrjj

                                          @dvlpr.bernard
                                          Hi
                                          Just like the
                                          QString ch_topic;
                                          Then all member functions have access to it as they are part of the class.

                                          D Offline
                                          D Offline
                                          dvlpr.bernard
                                          wrote on last edited by
                                          #38

                                          @mrjj
                                          whenever I use qDebug() <<get_ch_Topic.getTopic() in the same function where ch_topic was define it returns "IF". But when I use qDebug() <<get_ch_Topic.getTopic() in other functions it return "". I don't know why but maybe because the object name was different?

                                          0_1556213404603_c1fd677f-9d65-4757-823b-cd0ca12c8cd1-image.png

                                          0_1556213335075_393dae0b-1e06-4d26-b205-1442f8e031ab-image.png
                                          0_1556213772599_8a754c36-c9f0-4944-9321-6a467c0b3431-image.png
                                          0_1556213365670_97704c96-1c78-4e8d-a8f3-d6ed2356bc05-image.png

                                          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