Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Italian
  4. Determinare contenuto cella di qtablewidget
Forum Updated to NodeBB v4.3 + New Features

Determinare contenuto cella di qtablewidget

Scheduled Pinned Locked Moved Solved Italian
15 Posts 2 Posters 4.9k Views
  • 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.
  • VRoninV Offline
    VRoninV Offline
    VRonin
    wrote on last edited by
    #4

    ok, ti sei complicato semplicemente molto la vita. Lascia perdere le immagini per il momento.

    class Pezzo{
    public:
    enum class Tipo{
    Nessuno
    ,Pedone
    ,Torre
    ,Cavallo
    ,Alfiere
    ,Regina
    ,Re
    };
    enum class Colore{
    Nessuno,Nero,Bianco
    };
    Tipo tipo;
    Colore colore;
    Pezzo() : tipo(Nessuno), colore(Nessuno){}
    Pezzo(Tipo tp, Colore cl): tipo(tp), colore(cl){}
    Pezzo(const Pezzo&)=default;
    };
    Q_DECLARE_METATYPE(Pezzo)
    

    ora puoi salvare i pezzi direattamente nel modello e lasciare al delegate il compito di disegnarli

    "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
    ~Napoleon Bonaparte

    On a crusade to banish setIndexWidget() from the holy land of Qt

    1 Reply Last reply
    0
    • B Offline
      B Offline
      bvox123
      wrote on last edited by
      #5

      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:

      1. Quale slot dovrei attivare quando si fa click su una cella affinché possa determinare se la mia matrice contiene un pezzo spostabile;
      2. 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.

      1 Reply Last reply
      0
      • VRoninV Offline
        VRoninV Offline
        VRonin
        wrote on last edited by
        #6

        Non mi e' chiaro come tu connetta la matrice al QTableWidget

        "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
        ~Napoleon Bonaparte

        On a crusade to banish setIndexWidget() from the holy land of Qt

        1 Reply Last reply
        0
        • B Offline
          B Offline
          bvox123
          wrote on last edited by
          #7

          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;
          
          
          1 Reply Last reply
          0
          • VRoninV Offline
            VRoninV Offline
            VRonin
            wrote on last edited by
            #8

            Spero che questo sia abbastanza per riporatrti sulla retta via senza doverti far ricominciare da 0:
            https://bitbucket.org/LBeldi/esempioscacchi/src

            "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
            ~Napoleon Bonaparte

            On a crusade to banish setIndexWidget() from the holy land of Qt

            1 Reply Last reply
            0
            • B Offline
              B Offline
              bvox123
              wrote on last edited by
              #9

              Sei straordinario VRonin.
              Ma la mia ignoranza è talmente grande da non riuscire a capire dove può stare un errore. Eccolo:
              0_1520576321256_Schermata del 2018-03-09 07-16-39.png
              Ancora moltissime grazie.

              1 Reply Last reply
              0
              • B Offline
                B Offline
                bvox123
                wrote on last edited by
                #10

                Non so come ho fatto, ma sono riuscito a farlo funzionare.
                Studierò, ma sono convinto di avere ancora bisogno del tuo aiuto.
                Grazie.

                1 Reply Last reply
                0
                • VRoninV Offline
                  VRoninV Offline
                  VRonin
                  wrote on last edited by VRonin
                  #11

                  Ho aggiornato il codice. Ora i pedoni si possono muovere e mangiare.
                  L'errore della vtable e' solo un singhiozzo, basta cancellare la cartella di build, re-runnare qmake e tutto funziona

                  "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                  ~Napoleon Bonaparte

                  On a crusade to banish setIndexWidget() from the holy land of Qt

                  1 Reply Last reply
                  0
                  • B Offline
                    B Offline
                    bvox123
                    wrote on last edited by
                    #12

                    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:
                    0_1520595941793_Schermata del 2018-03-09 12-38-10.png
                    Per caso il motivo risiede nel fatto che non si possono impostare alcune proprietà da programma, ma solo col generatore del QtCreator ?

                    1 Reply Last reply
                    0
                    • B Offline
                      B Offline
                      bvox123
                      wrote on last edited by
                      #13

                      Ho risolto, mi mancava l'include.

                      1 Reply Last reply
                      0
                      • VRoninV Offline
                        VRoninV Offline
                        VRonin
                        wrote on last edited by VRonin
                        #14

                        Se ti puo' aiutare ho finito il programma qui: https://github.com/VSRonin/EsempioScacchi

                        "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                        ~Napoleon Bonaparte

                        On a crusade to banish setIndexWidget() from the holy land of Qt

                        1 Reply Last reply
                        0
                        • B Offline
                          B Offline
                          bvox123
                          wrote on last edited by
                          #15

                          Certo che mi può aiutare. Sei stato gentilissimo e ti ringrazio molto.

                          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