Determinare contenuto cella di qtablewidget
-
Più vado avanti e più faccio mia la frase di Socrate "So solo una cosa, so di non sapere niente".
Dovrei mettermi a studiare, capire cosa significhi e come si usa il concetto di delegate... ma forse non è più il mio tempo.
Mi devo limitare ad utilizzare i metodi che conosco, poco conciliabili con le nuove tecniche, più potenti sicuramente, ma non facili da usare.
Fatta questa premessa...
Ho creato la matrice "int scacchieretrappole [300][144] = {}; // la scacchiera è 12x12 con una doppia cornice di elementi a 55" in cui il primo elemento è così costituito:55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 19 20 21 18 17 22 23 24 55 55 55 55 25 26 27 28 29 30 31 32 55 55 55 55 0 0 0 0 0 0 0 0 55 55 55 55 0 0 0 0 0 0 0 0 55 55 55 55 0 0 0 0 0 0 0 0 55 55 55 55 0 0 0 0 0 0 0 0 55 55 55 55 9 10 11 12 13 14 15 16 55 55 55 55 3 4 5 2 1 6 7 8 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55
I numeri da 1 a 32 rappresentano un pezzi degli scacchi, il numero 0 è l'assenza di un pezzo, mentre il numero 55 è la cornice. Ho pensato a questa soluzione (della doppia cornice a 55) perché così mi è facile determinare quando con un movimento si va fuori dalla scacchiera; così anche la mossa del cavallo è una mossa controllabile.
Posto che il n. 1 è il re bianco, il 2 è la donna bianca e così via, ho riportato il contenuto del primo elemento della matrice nella qtablewigdet così:switch (*punt) { case RB: thumbnail->setData(Qt::DecorationRole, QPixmap::fromImage(ImmaginePezzi[1][1])); break; case DB: thumbnail->setData(Qt::DecorationRole, QPixmap::fromImage(ImmaginePezzi[1][2])); break; ... default: thumbnail->setData(Qt::DecorationRole, QPixmap::fromImage(ImmaginePezzi[0][0])); break; } if (*punt != 55) { ui->Scacchiera->setItem(i - 2, j - 2, thumbnail); if ((i + j) % 2 != 0) ui->Scacchiera->item(i - 2, j - 2)->setBackgroundColor(colorescuro); } }
Ora, impostando alcune proprietà della qtablewidget riesco a fare click su un pedone e spostarlo nalla cella sopra, ma questo movimento dovrei poi riportarlo nella matrice di 300 elementi detta prima.
Ma mi mancano principalmente 2 cose:- Quale slot dovrei attivare quando si fa click su una cella affinché possa determinare se la mia matrice contiene un pezzo spostabile;
- Quale slot dovrei attivare quando si lascia depositare il pezzo su un'altra cella (questo mi serve anche per reimpostare correttamente il colore di fondo delle celle di arrivo e partenza).
Posso approfittare della tua pazienza, VRonin, e chiederti quali potrebbero essere gli slots che mi concedono queste cose ?
Ti ringrazio immensamente. -
la parte iniziale della routine che ho esposto sopra è la seguente:
void Scacchi01::elaborapartita(int (*indirizzoscacchiera)) { int *punt = NULL; for (int i = 0; i < 8 + 4; i++) { for (int j = 0; j < 8 + 4; j++) { punt = indirizzoscacchiera + (i * 12) + j; QTableWidgetItem *thumbnail = new QTableWidgetItem; switch (*punt) { case RB: thumbnail->setData(Qt::DecorationRole, QPixmap::fromImage(ImmaginePezzi[1][1])); break; case DB: thumbnail->setData(Qt::DecorationRole, QPixmap::fromImage(ImmaginePezzi[1][2])); break;
-
Spero che questo sia abbastanza per riporatrti sulla retta via senza doverti far ricominciare da 0:
https://bitbucket.org/LBeldi/esempioscacchi/src -
E' bellissimo... ma io ho bisogno di metterci le mani e quindi non posso lasciarlo così com'è senza capire.
Per questo motivo sto tantando di utilizzare una Form Ui come proposto dal QtCreator. Questo soprattutto perché non conosco le varie proprietà da impostare per ogni widget che dovrei generare: sono più che in alto mare, lo so.
Ho tentato di creare sulla mia form di prova una QTableView, che ho chiamato Scacchiera, e da programma sto impostando le varie proprietà come avevi fatto tu. Purtroppo mi dà un errore e non riesco a capire come rimuovere. Eccolo:
Per caso il motivo risiede nel fatto che non si possono impostare alcune proprietà da programma, ma solo col generatore del QtCreator ? -
Se ti puo' aiutare ho finito il programma qui: https://github.com/VSRonin/EsempioScacchi