Oppure

Loading
27/11/19 11:07
Thejuster
Buongiorno.

Ho un problema nell'assegnare un valore da una classe.

in pratica, ClasseA chiama un metodo in ClasseB dove invia se stessa come argomento.
di seguito in classeA devo assegnare un valore nella classeB contenuta nell'argomento.

uso Qt.
Ho provato diverse soluzioni dichiarando direttamente nel file di intestazione NomeClasse *oggetto;
Ma ho errori sempre diversi tentando di risolvere il problema

la soluzione che ora sto tentando di completare è questa.

dichiaro nella classe CardItem

Anche se è sbagliato, è ciò che vorrei fare
magari mostrando cosa voglio fare da codice (anche sbagliato) si capisce meglio.


Classe MainWindow

//MainWindow.h

public:
int numero = 0;



//MainWindow.cpp

void MainWindow::Test()
{

    CardItem *item = new CardItem;

   item->prova(this); //error: no matching function for call to 'CardItem::Prova(MainWindow* const)'
}






//CardItem.h

#include "mainwindow.h"

public:

void Prova(MainWindow *parent);  //error: 'MainWindow' has not been declared



//CardItem.cpp


void CardItem::Prova(MainWindow *parent)
{

    parent->numero = 5;
}




Come posso risolvere?

Mi serve inviare a quella classe da un void il MainWindow stesso per poter modificare alcuni parametri.

Se provo a fare nella classe CardItem

MainWindow *t = new MainWindow;

mi dice is not a name type.

ho tentato anche con un cast di conversione ma ho lo stesso errore
consigli?
Ultima modifica effettuata da Thejuster 27/11/19 11:11
mire.forumfree.it/ - Mire Engine
C# UI Designer
27/11/19 12:51
nessuno
Ma la classe MainWindow dove è definita?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
27/11/19 14:09
Thejuster
Di default è già definita quando viene creato un nuovo progetto.
Tipo come quando in .net crei una nuova applicazione WinForm. lo stesso fà il Qt
Genera già una MainWindow principale.

Stranamente non riesco ad avere accesso in nessun modo a quella classe.

Viene di default dichiarata nel file main.cpp


#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    
    return a.exec();
}



Nel caso vuoi vedere meglio ecco

Errore 1 ( MainWindow.cpp )
i.ibb.co/yg5sYx7/…

Errore 2 ( CardItem.h )
i.ibb.co/tsrP4VY/…


Ultima modifica effettuata da Thejuster 27/11/19 14:20
mire.forumfree.it/ - Mire Engine
C# UI Designer
27/11/19 16:15
Thejuster
Risolto diversamente.

Dopo essermi documentato che non è possibile risalire al Form Principale perché considerato come
Ciclo di dipendenza mi sono escogitato questo altro metodo.

ovvero dichiarare al Form principale un array di tutti gli oggetti CardItem * così da passare alla classe l'indirizzo del puntatore e manovrare il valore quando l'elemento viene azionato.

al check eseguo


foreach (QGraphicsItem *item, s->items())
    {
        CardItem *it = qgraphicsitem_cast<CardItem *>(item);
        if(!it)
            continue;

        if(it->selected)
        QMessageBox::information(this,"Test",QString::number(it->Numero),QMessageBox::Ok);
    }


mire.forumfree.it/ - Mire Engine
C# UI Designer