Qt - Frage zu SignalMapper



  • Hio 🙂 ich möchte für ne Übungsaufgabe n TicTacToe programmieren, und zwar nicht mit Buttons, sondern mit Klickbaren Labels.

    class ClickableLabel : public QLabel{
    
        Q_OBJECT
    
    public:
        explicit ClickableLabel( const QString& text ="", QWidget * parent = 0 );
        ~ClickableLabel();
    
    signals:
        void clicked();
    
    protected:
        void mousePressEvent ( QMouseEvent * event ) ;
    };
    
    ClickableLabel::ClickableLabel( const QString& text, QWidget * parent ) : QLabel(parent){}
    
    ClickableLabel::~ClickableLabel(){}
    
    void ClickableLabel::mousePressEvent ( QMouseEvent * event )
    {
        emit clicked();
    }
    

    Diesen Code hab ich aus dem offiziellen QtForum, geh also nich davon aus, dass da der Fehler ist.

    Jetzt mein Code mit dem Signal Mapper:

    GridMapper = new QSignalMapper(this);
    	int GridPosition;
    
    	Grid = new ClickableLabel*[3];
    	for(int i(0); i < 3; i++) Grid[i] = new ClickableLabel[3];
    	for(int x_grid(0); x_grid < 3 ; x_grid++){
    		for(int y_grid(0); y_grid < 3; y_grid++){
    			Grid[x_grid][y_grid].setGeometry(20+ x_grid * 70, 20 + y_grid * 70, 70, 70);
    			Grid[x_grid][y_grid].setParent(this);
    			Grid[x_grid][y_grid].setAlignment(Qt::AlignVCenter);
    			Grid[x_grid][y_grid].setAlignment(Qt::AlignCenter);
    			Grid[x_grid][y_grid].setFont(*FontGrid);
    			Grid[x_grid][y_grid].setText("X");
    			GridPosition = (x_grid + 1)*(y_grid + 1);
    			connect(&Grid[x_grid][y_grid], SIGNAL(clicked()), GridMapper, SLOT(map()));
    
    			GridMapper->setMapping(&Grid[x_grid][y_grid], GridPosition);
    		}
    	}
    	connect(GridMapper, SIGNAL(mapped(int )), this, SIGNAL(clicked( int )));
    	connect(this, SIGNAL(clicked(int)), this, SLOT(PlayAction(int)));
    

    Ich hab also ein feld von diesen Klickbaren labels und möchte dieses Feld mit den Feldpositionen mappen udn dann bei klick meine PlayAction funktion mit der Feld id als parameter aufrufen. Nur wird diese nicht aufgerufen, wenn ich auf die labels klicke.

    Sieht wer n Fehler, ich find da erstmal nichts, bin aber algemein recht neu bei Qt.


Anmelden zum Antworten