Unsolved Advice about the application I will be making? (I'm a beginner)
-
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.
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 -
@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):
-
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"; -
When the user click the Beginner button then int Dif_Lvl = 1 or string Dif_Lvl= "Beginner";
-
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?
Thanks :)
-
-
@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.
-
@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. -
@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?
-
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 ?
-
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.
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.
-
@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. -
@mrjj
Uhhmm I see, I need to use Text rather than string.
Thank you, thank you! -
@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. -
@mrjj
Sir. Just wondering how can I access the string value from other functions? I want to use it in other functions. -
Hi
what string do you mean ?
The Topic column string from the data base ? -
@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?
-
@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. -
@mrjj
Hello, Hmm didn't know why this is happening. What I did wrong?
-
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. -
@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 -
@dvlpr.bernard
Hi
Just like the
QString ch_topic;
Then all member functions have access to it as they are part of the class. -
@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?
-
Hi
Do NOT make new instances of the main window class like you do
that is just plain wrong.
You are already in an instance. So no need to ever make new ones.
you can simply use the ch_topic variable.
Its already declared in the MainWindow you are using already.