identity id and exclusive group Radio Button created dynamically from a database
-
Hi everyone,
I made a little app which read the possible answers of a quiz from a database.
The first problem is that I don't know how to definite the button id if i create them dynamically so I cannot identify which buttons are pressed to save the answers in the database.
Another problem is that I cannot create Exclusive Groups dynamically.
I hope some you can help me. Thank you all and sorry for my bad English.
RadioButton.qml*********************
import QtQuick 2.4
import QtQuick.Controls 1.2
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.2
import QtQuick.Window 2.0
import "Function.js" as FunctionPage{
id:page1
Component.onCompleted: {Function.openDB()}Column{
id:column
anchors{
top:parent.top
horizontalCenter: parent.horizontalCenter
}
spacing:20Row{ id:rowButtons Button{ id:butR height:20 width:100 text: "READ!" onClicked: {read()} } Button{ id:butI height:20 width:100 text: "SAVE ANSWERS!" //onClicked: {Function.insertWorkerAnswers(workerName.text, workerSurname.text)} }} Row{ spacing:10 Rectangle{ id:name height:20 width:50 Text{ anchors.fill: parent text:"Name" } } TextField{ id:workerName height: name.height width:name.width } } Row{ spacing:10 Rectangle{ id:surname height:20 width:50 Text{ anchors.fill: parent text:"Surname" } } TextField{ id:workerSurname height: name.height width:name.width } }}
ScrollView{
id:quiz
anchors{
top:column.bottom
bottom:parent.bottom
topMargin:10
bottomMargin: 10
left:parent.left
right:parent.right
}width: parent.width height:parent.height Column{ id:quizList spacing:3 anchors{ top:parent.top topMargin:5 left:parent.left leftMargin:10 right:parent.right rightMargin: 10 bottom: parent.bottom bottomMargin:1 }}}
Component{
id:answerComponent
RadioButton{
id:answ
property int numberQ
property int numberA
property string textA
anchors{
left:parent.left
leftMargin: 20
}
text:textA
}
}function read(){
for(var j=0;j<5;j++){
var rrItems=Function.readQuizAnswers(j)
for(var n in rrItems){
newAComponent(rrItems[n])
}}}
function newAComponent(args){
var anote=answerComponent.createObject(quizList,args)
}
}Page.qml**********
import QtQuick 2.4
import QtQuick.Controls 1.2
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.2
import QtQuick.Window 2.0Rectangle {
id: page
height: 600
width:page.height/1.8
border.color: "#4c4c4c"
gradient: Gradient {
GradientStop {
position: 0
color: "#7eb06b"
}GradientStop { position: 1 color: "#000000" }}
}Function.js*******************************************
.pragma library
.import QtQuick.LocalStorage 2.0 as Sqlvar _DB
//CREATE**********************************************
function openDB() {
print("_dbase.createDB()")
_DB = Sql.LocalStorage.openDatabaseSync("AppDataBase","1.0","The DB of the app", 1000000);
createQuizAnswers();
createWorkerAnswers();
}function createQuizAnswers() {
print("respostesDB.createTable()")
_DB.transaction( function(tx) {
tx.executeSql("CREATE TABLE IF NOT EXISTS quizAnswer(quizAnswerId INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,numberQ INTEGER NOT NULL, numberA INTEGER NOT NULL,textA TEXT NOT NULL)");
});deleteQuizAnswers()
insertQuizAnswer(1,1,"Male")
insertQuizAnswer(1,2,"Female")
insertQuizAnswer(2,1,"<20")
insertQuizAnswer(2,2,"<40")
insertQuizAnswer(2,3,"<60")
insertQuizAnswer(2,4,">60")
insertQuizAnswer(3,1,"Europe")
insertQuizAnswer(3,2,"North America")
insertQuizAnswer(3,3,"South America")
insertQuizAnswer(3,4,"Others")
}
function createWorkerAnswers() {
print("respostes E createTable()")
_DB.transaction( function(tx) {
tx.executeSql(
"CREATE TABLE IF NOT EXISTS workerAnswer(workerAnswerId INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,workerName TEXT NOT NULL, workerSurname TEXT NOT NULL, r1_1 TEXT,r1_2 TEXT,r2_1 TEXT,r2_2 TEXT,r2_3 TEXT,r2_4 TEXT,r3_1 TEXT,r3_2 TEXT,r3_3 TEXT,r3_4 TEXT)");
});
}function deleteQuizAnswers(){
_DB.transaction( function(tx) {
tx.executeSql("DELETE FROM quizAnswer")
})
}
function insertQuizAnswer(np,nr,texto){
_DB.transaction(function(tx){
tx.executeSql( "INSERT INTO quizAnswer(numberQ,numberA, textA) VALUES (?,?,?)", [np,nr,texto])
})}//READ**********************************************
function readQuizAnswers(np) {
var rrItems = {}
_DB.readTransaction( function(tx) {
var rs=tx.executeSql("SELECT * FROM quizAnswer WHERE numberQ=?", [np]);
var item
for (var h=0; h<rs.rows.length; h++) {
item = rs.rows.item(h)
rrItems[item.numberA] = item;
}
})
return rrItems
}//INSERT*****************
function insertWorkerAnswers(name,surname,r1_1, r1_2, r2_1, r2_2, r2_3, r2_4, r3_1, r3_2, r3_3, r3_4){
_DB.transaction(function(tx){
tx.executeSql( "INSERT INTO workerAnswer(workerName, workerSurname,r1_1, r1_2, r2_1, r2_2, r2_3, r2_4, r3_1, r3_2, r3_3, r3_4 ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", [name,surname,r1_1, r1_2, r2_1, r2_2, r2_3, r2_4, r3_1, r3_2, r3_3, r3_4])
})} -
Hi everyone,
I made a little app which read the possible answers of a quiz from a database.
The first problem is that I don't know how to definite the button id if i create them dynamically so I cannot identify which buttons are pressed to save the answers in the database.
Another problem is that I cannot create Exclusive Groups dynamically.
I hope some you can help me. Thank you all and sorry for my bad English.
RadioButton.qml*********************
import QtQuick 2.4
import QtQuick.Controls 1.2
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.2
import QtQuick.Window 2.0
import "Function.js" as FunctionPage{
id:page1
Component.onCompleted: {Function.openDB()}Column{
id:column
anchors{
top:parent.top
horizontalCenter: parent.horizontalCenter
}
spacing:20Row{ id:rowButtons Button{ id:butR height:20 width:100 text: "READ!" onClicked: {read()} } Button{ id:butI height:20 width:100 text: "SAVE ANSWERS!" //onClicked: {Function.insertWorkerAnswers(workerName.text, workerSurname.text)} }} Row{ spacing:10 Rectangle{ id:name height:20 width:50 Text{ anchors.fill: parent text:"Name" } } TextField{ id:workerName height: name.height width:name.width } } Row{ spacing:10 Rectangle{ id:surname height:20 width:50 Text{ anchors.fill: parent text:"Surname" } } TextField{ id:workerSurname height: name.height width:name.width } }}
ScrollView{
id:quiz
anchors{
top:column.bottom
bottom:parent.bottom
topMargin:10
bottomMargin: 10
left:parent.left
right:parent.right
}width: parent.width height:parent.height Column{ id:quizList spacing:3 anchors{ top:parent.top topMargin:5 left:parent.left leftMargin:10 right:parent.right rightMargin: 10 bottom: parent.bottom bottomMargin:1 }}}
Component{
id:answerComponent
RadioButton{
id:answ
property int numberQ
property int numberA
property string textA
anchors{
left:parent.left
leftMargin: 20
}
text:textA
}
}function read(){
for(var j=0;j<5;j++){
var rrItems=Function.readQuizAnswers(j)
for(var n in rrItems){
newAComponent(rrItems[n])
}}}
function newAComponent(args){
var anote=answerComponent.createObject(quizList,args)
}
}Page.qml**********
import QtQuick 2.4
import QtQuick.Controls 1.2
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.2
import QtQuick.Window 2.0Rectangle {
id: page
height: 600
width:page.height/1.8
border.color: "#4c4c4c"
gradient: Gradient {
GradientStop {
position: 0
color: "#7eb06b"
}GradientStop { position: 1 color: "#000000" }}
}Function.js*******************************************
.pragma library
.import QtQuick.LocalStorage 2.0 as Sqlvar _DB
//CREATE**********************************************
function openDB() {
print("_dbase.createDB()")
_DB = Sql.LocalStorage.openDatabaseSync("AppDataBase","1.0","The DB of the app", 1000000);
createQuizAnswers();
createWorkerAnswers();
}function createQuizAnswers() {
print("respostesDB.createTable()")
_DB.transaction( function(tx) {
tx.executeSql("CREATE TABLE IF NOT EXISTS quizAnswer(quizAnswerId INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,numberQ INTEGER NOT NULL, numberA INTEGER NOT NULL,textA TEXT NOT NULL)");
});deleteQuizAnswers()
insertQuizAnswer(1,1,"Male")
insertQuizAnswer(1,2,"Female")
insertQuizAnswer(2,1,"<20")
insertQuizAnswer(2,2,"<40")
insertQuizAnswer(2,3,"<60")
insertQuizAnswer(2,4,">60")
insertQuizAnswer(3,1,"Europe")
insertQuizAnswer(3,2,"North America")
insertQuizAnswer(3,3,"South America")
insertQuizAnswer(3,4,"Others")
}
function createWorkerAnswers() {
print("respostes E createTable()")
_DB.transaction( function(tx) {
tx.executeSql(
"CREATE TABLE IF NOT EXISTS workerAnswer(workerAnswerId INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,workerName TEXT NOT NULL, workerSurname TEXT NOT NULL, r1_1 TEXT,r1_2 TEXT,r2_1 TEXT,r2_2 TEXT,r2_3 TEXT,r2_4 TEXT,r3_1 TEXT,r3_2 TEXT,r3_3 TEXT,r3_4 TEXT)");
});
}function deleteQuizAnswers(){
_DB.transaction( function(tx) {
tx.executeSql("DELETE FROM quizAnswer")
})
}
function insertQuizAnswer(np,nr,texto){
_DB.transaction(function(tx){
tx.executeSql( "INSERT INTO quizAnswer(numberQ,numberA, textA) VALUES (?,?,?)", [np,nr,texto])
})}//READ**********************************************
function readQuizAnswers(np) {
var rrItems = {}
_DB.readTransaction( function(tx) {
var rs=tx.executeSql("SELECT * FROM quizAnswer WHERE numberQ=?", [np]);
var item
for (var h=0; h<rs.rows.length; h++) {
item = rs.rows.item(h)
rrItems[item.numberA] = item;
}
})
return rrItems
}//INSERT*****************
function insertWorkerAnswers(name,surname,r1_1, r1_2, r2_1, r2_2, r2_3, r2_4, r3_1, r3_2, r3_3, r3_4){
_DB.transaction(function(tx){
tx.executeSql( "INSERT INTO workerAnswer(workerName, workerSurname,r1_1, r1_2, r2_1, r2_2, r2_3, r2_4, r3_1, r3_2, r3_3, r3_4 ) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", [name,surname,r1_1, r1_2, r2_1, r2_2, r2_3, r2_4, r3_1, r3_2, r3_3, r3_4])
})}Hi @Pisko and Welcome,
The first problem is that I don't know how to definite the button id if i create them dynamically so I cannot identify which buttons are pressed to save the answers in the database.
Unfortunately you cant assign an
idfor dynamically created items. Check this for more details.Another problem is that I cannot create Exclusive Groups dynamically.
I think you can use a ExclusiveGroup here.