Anfängerfragen zu Klassen etc.

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
andi7
Beiträge: 11
Registriert: 18. August 2009 15:03

Anfängerfragen zu Klassen etc.

Beitrag von andi7 »

Ich habe in C++ ein kleines Schachspiel (Nur 1 gegen 1 ohne Computer) für auf die Konsole programmiert.

Nun möchte ich eine Qt-Grafikoberfläche (bin leider totaler Anfänger in Qt und Klassen verstehe ich auch nicht ganz 100%, da ich aber nur ein kleines GUI machen will, hoffe ich, dass ihr mir trotzdem helfen könnt) machen.

Habe mal hier auf diesem Bild aufgeschrieben, wie das Programm aussehen sollte:


Bild

Beim rot angestrichenen habe ich Probleme

Hier mein Code(habe es nur bisher nur bis zum ersten rot Angestrichenem auf dem Blatt geschafft) :


Code: Alles auswählen

//main.cpp

#include <QtGui/QApplication>
#include "my_class.h"
#include <QApplication>
#include <QPushButton>
#include <QVBoxLayout>
#include <QLabel>
 #include <QFont>
 #include <QWidget>
#include <QObject>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget* win = new QWidget;

my_class  nu00("TS1", 0, 0);

my_class  nu01("BS1", 1, 0);
nu01.empfangenOn();
my_class  nu02("OOO", 2, 0);
my_class  nu03("OOO", 3, 0);
my_class  nu04("OOO", 4, 0);
my_class  nu05("OOO", 5, 0);
my_class  nu06("BW1", 6, 0);
my_class  nu07("TW1", 7, 0);
my_class  nu10("SS1", 0, 1);
my_class  nu11("BS2", 1, 1);
my_class  nu12("OOO", 2, 1);
my_class  nu13("OOO", 3, 1);
my_class  nu14("OOO", 4, 1);
my_class  nu15("OOO", 5, 1);
my_class  nu16("BW2", 6, 1);
my_class  nu17("SW1", 7, 1);
my_class  nu20("LS1", 0, 2);
my_class  nu21("BS3", 1, 2);
my_class  nu22("OOO", 2, 2);
my_class  nu23("OOO", 3, 2);
my_class  nu24("OOO", 4, 2);
my_class  nu25("OOO", 5, 2);
my_class  nu26("BW3", 6, 2);
my_class  nu27("LW1", 7, 2);
my_class  nu30("DS1", 0, 3);
my_class  nu31("BS4", 1, 3);
my_class  nu32("OOO", 2, 3);
my_class  nu33("OOO", 3, 3);
my_class  nu34("OOO", 4, 3);
my_class  nu35("OOO", 5, 3);
my_class  nu36("BW4", 6, 3);
my_class  nu37("DW1", 7, 3);
my_class  nu40("KS1", 0, 4);
my_class  nu41("BS5", 1, 4);
my_class  nu42("OOO", 2, 4);
my_class  nu43("OOO", 3, 4);
my_class  nu44("OOO", 4, 4);
my_class  nu45("OOO", 5, 4);
my_class  nu46("BW5", 6, 4);
my_class  nu47("KW1", 7, 4);
my_class  nu50("LS2", 0, 5);
my_class  nu51("BS6", 1, 5);
my_class  nu52("OOO", 2, 5);
my_class  nu53("OOO", 3, 5);
my_class  nu54("OOO", 4, 5);
my_class  nu55("OOO", 5, 5);
my_class  nu56("BW6", 6, 5);
my_class  nu57("LW2", 7, 5);
my_class  nu60("SS2", 0, 6);
my_class  nu61("BS7", 1, 6);
my_class  nu62("OOO", 2, 6);
my_class  nu63("OOO", 3, 6);
my_class  nu64("OOO", 4, 6);
my_class  nu65("OOO", 5, 6);
my_class  nu66("BW7", 6, 6);
my_class  nu67("SW2", 7, 6);
my_class  nu70("TS2", 0, 7);
my_class  nu71("BS8", 1, 7);
my_class  nu72("OOO", 2, 7);
my_class  nu73("OOO", 3, 7);
my_class  nu74("OOO", 4, 7);
my_class  nu75("OOO", 5, 7);
my_class  nu76("BW8", 6, 7);
my_class  nu77("TW2", 7, 7);




QGridLayout* layout = new QGridLayout(win);
QPushButton* n00= new QPushButton("TS1");
QPushButton* n01= new QPushButton("BS1");
QPushButton* n02= new QPushButton("OOO");
QPushButton* n03= new QPushButton("OOO");
QPushButton* n04= new QPushButton("OOO");
QPushButton* n05= new QPushButton("OOO");
QPushButton* n06= new QPushButton("BW1");
QPushButton* n07= new QPushButton("TW1");
QPushButton* n10= new QPushButton("SS1");
QPushButton* n11= new QPushButton("BS2");
QPushButton* n12= new QPushButton("OOO");
QPushButton* n13= new QPushButton("OOO");
QPushButton* n14= new QPushButton("OOO");
QPushButton* n15= new QPushButton("OOO");
QPushButton* n16= new QPushButton("BW2");
QPushButton* n17= new QPushButton("SW1");
QPushButton* n20= new QPushButton("LS1");
QPushButton* n21= new QPushButton("BS3");
QPushButton* n22= new QPushButton("OOO");
QPushButton* n23= new QPushButton("OOO");
QPushButton* n24= new QPushButton("OOO");
QPushButton* n25= new QPushButton("OOO");
QPushButton* n26= new QPushButton("BW3");
QPushButton* n27= new QPushButton("LW1");
QPushButton* n30= new QPushButton("DS1");
QPushButton* n31= new QPushButton("BS4");
QPushButton* n32= new QPushButton("OOO");
QPushButton* n33= new QPushButton("OOO");
QPushButton* n34= new QPushButton("OOO");
QPushButton* n35= new QPushButton("OOO");
QPushButton* n36= new QPushButton("BW4");
QPushButton* n37= new QPushButton("DW1");
QPushButton* n40= new QPushButton("KS1");
QPushButton* n41= new QPushButton("BS5");
QPushButton* n42= new QPushButton("OOO");
QPushButton* n43= new QPushButton("OOO");
QPushButton* n44= new QPushButton("OOO");
QPushButton* n45= new QPushButton("OOO");
QPushButton* n46= new QPushButton("BW5");
QPushButton* n47= new QPushButton("KW1");
QPushButton* n50= new QPushButton("LS2");
QPushButton* n51= new QPushButton("BS6");
QPushButton* n52= new QPushButton("OOO");
QPushButton* n53= new QPushButton("OOO");
QPushButton* n54= new QPushButton("OOO");
QPushButton* n55= new QPushButton("OOO");
QPushButton* n56= new QPushButton("BW6");
QPushButton* n57= new QPushButton("LW2");
QPushButton* n60= new QPushButton("SS2");
QPushButton* n61= new QPushButton("BS7");
QPushButton* n62= new QPushButton("OOO");
QPushButton* n63= new QPushButton("OOO");
QPushButton* n64= new QPushButton("OOO");
QPushButton* n65= new QPushButton("OOO");
QPushButton* n66= new QPushButton("BW7");
QPushButton* n67= new QPushButton("SW2");
QPushButton* n70= new QPushButton("TS2");
QPushButton* n71= new QPushButton("BS8");
QPushButton* n72= new QPushButton("OOO");
QPushButton* n73= new QPushButton("OOO");
QPushButton* n74= new QPushButton("OOO");
QPushButton* n75= new QPushButton("OOO");
QPushButton* n76= new QPushButton("BW8");
QPushButton* n77= new QPushButton("TW2");






layout->addWidget( n00 , 0, 0);
layout->addWidget( n01 , 1, 0);
layout->addWidget( n02 , 2, 0);
layout->addWidget( n03 , 3, 0);
layout->addWidget( n04 , 4, 0);
layout->addWidget( n05 , 5, 0);
layout->addWidget( n06 , 6, 0);
layout->addWidget( n07 , 7, 0);
layout->addWidget( n10 , 0, 1);
layout->addWidget( n11 , 1, 1);
layout->addWidget( n12 , 2, 1);
layout->addWidget( n13 , 3, 1);
layout->addWidget( n14 , 4, 1);
layout->addWidget( n15 , 5, 1);
layout->addWidget( n16 , 6, 1);
layout->addWidget( n17 , 7, 1);
layout->addWidget( n20 , 0, 2);
layout->addWidget( n21 , 1, 2);
layout->addWidget( n22 , 2, 2);
layout->addWidget( n23 , 3, 2);
layout->addWidget( n24 , 4, 2);
layout->addWidget( n25 , 5, 2);
layout->addWidget( n26 , 6, 2);
layout->addWidget( n27 , 7, 2);
layout->addWidget( n30 , 0, 3);
layout->addWidget( n31 , 1, 3);
layout->addWidget( n32 , 2, 3);
layout->addWidget( n33 , 3, 3);
layout->addWidget( n34 , 4, 3);
layout->addWidget( n35 , 5, 3);
layout->addWidget( n36 , 6, 3);
layout->addWidget( n37 , 7, 3);
layout->addWidget( n40 , 0, 4);
layout->addWidget( n41 , 1, 4);
layout->addWidget( n42 , 2, 4);
layout->addWidget( n43 , 3, 4);
layout->addWidget( n44 , 4, 4);
layout->addWidget( n45 , 5, 4);
layout->addWidget( n46 , 6, 4);
layout->addWidget( n47 , 7, 4);
layout->addWidget( n50 , 0, 5);
layout->addWidget( n51 , 1, 5);
layout->addWidget( n52 , 2, 5);
layout->addWidget( n53 , 3, 5);
layout->addWidget( n54 , 4, 5);
layout->addWidget( n55 , 5, 5);
layout->addWidget( n56 , 6, 5);
layout->addWidget( n57 , 7, 5);
layout->addWidget( n60 , 0, 6);
layout->addWidget( n61 , 1, 6);
layout->addWidget( n62 , 2, 6);
layout->addWidget( n63 , 3, 6);
layout->addWidget( n64 , 4, 6);
layout->addWidget( n65 , 5, 6);
layout->addWidget( n66 , 6, 6);
layout->addWidget( n67 , 7, 6);
layout->addWidget( n70 , 0, 7);
layout->addWidget( n71 , 1, 7);
layout->addWidget( n72 , 2, 7);
layout->addWidget( n73 , 3, 7);
layout->addWidget( n74 , 4, 7);
layout->addWidget( n75 , 5, 7);
layout->addWidget( n76 , 6, 7);
layout->addWidget( n77 , 7, 7);

QObject::connect(n00, SIGNAL(clicked()),
                 &nu00,SLOT( geklickt() ));

QObject::connect(n01, SIGNAL(clicked()),&nu01, SLOT(geklickt()));
QObject::connect(n02, SIGNAL(clicked()),    &nu02, SLOT( geklickt())  );
QObject::connect(n03, SIGNAL(clicked()),    &nu03, SLOT( geklickt())  );
QObject::connect(n04, SIGNAL(clicked()),    &nu04, SLOT( geklickt())  );
QObject::connect(n05, SIGNAL(clicked() ) ,    &nu05, SLOT( geklickt())  );
QObject::connect(n06, SIGNAL(clicked()),    &nu06, SLOT( geklickt())  );
QObject::connect(n07, SIGNAL(clicked()),    &nu07, SLOT( geklickt())  );
QObject::connect(n10, SIGNAL(clicked()),    &nu10, SLOT( geklickt())  );
QObject::connect(n11, SIGNAL(clicked()),    &nu11, SLOT( geklickt())  );
QObject::connect(n12, SIGNAL(clicked()),    &nu12, SLOT( geklickt())  );
QObject::connect(n13, SIGNAL(clicked()),    &nu13, SLOT( geklickt())  );
QObject::connect(n14, SIGNAL(clicked()),    &nu14, SLOT( geklickt())  );
QObject::connect(n15, SIGNAL(clicked()),    &nu15, SLOT( geklickt())  );
QObject::connect(n16, SIGNAL(clicked()),    &nu16, SLOT( geklickt())  );
QObject::connect(n17, SIGNAL(clicked()),    &nu17, SLOT( geklickt())  );
QObject::connect(n20, SIGNAL(clicked()),    &nu20, SLOT( geklickt())  );
QObject::connect(n21, SIGNAL(clicked()),    &nu21, SLOT( geklickt())  );
QObject::connect(n22, SIGNAL(clicked()),    &nu22, SLOT( geklickt())  );
QObject::connect(n23, SIGNAL(clicked()),    &nu23, SLOT( geklickt())  );
QObject::connect(n24, SIGNAL(clicked()),    &nu24, SLOT( geklickt())  );
QObject::connect(n25, SIGNAL(clicked()),    &nu25, SLOT( geklickt())  );
QObject::connect(n26, SIGNAL(clicked()),    &nu26, SLOT( geklickt())  );
QObject::connect(n27, SIGNAL(clicked()),    &nu27, SLOT( geklickt())  );
QObject::connect(n30, SIGNAL(clicked()),    &nu30, SLOT( geklickt())  );
QObject::connect(n31, SIGNAL(clicked()),    &nu31, SLOT( geklickt())  );
QObject::connect(n32, SIGNAL(clicked()),    &nu32, SLOT( geklickt())  );
QObject::connect(n33, SIGNAL(clicked()),    &nu33, SLOT( geklickt())  );
QObject::connect(n34, SIGNAL(clicked()),    &nu34, SLOT( geklickt())  );
QObject::connect(n35, SIGNAL(clicked()),    &nu35, SLOT( geklickt())  );
QObject::connect(n36, SIGNAL(clicked()),    &nu36, SLOT( geklickt())  );
QObject::connect(n37, SIGNAL(clicked()),    &nu37, SLOT( geklickt())  );
QObject::connect(n40, SIGNAL(clicked()),    &nu40, SLOT( geklickt())  );
QObject::connect(n41, SIGNAL(clicked()),    &nu41, SLOT( geklickt())  );
QObject::connect(n42, SIGNAL(clicked()),    &nu42, SLOT( geklickt())  );
QObject::connect(n43, SIGNAL(clicked()),    &nu43, SLOT( geklickt())  );
QObject::connect(n44, SIGNAL(clicked()),    &nu44, SLOT( geklickt())  );
QObject::connect(n45, SIGNAL(clicked()),    &nu45, SLOT( geklickt())  );
QObject::connect(n46, SIGNAL(clicked()),    &nu46, SLOT( geklickt())  );
QObject::connect(n47, SIGNAL(clicked()),    &nu47, SLOT( geklickt())  );
QObject::connect(n50, SIGNAL(clicked()),    &nu50, SLOT( geklickt())  );
QObject::connect(n51, SIGNAL(clicked()),    &nu51, SLOT( geklickt())  );
QObject::connect(n52, SIGNAL(clicked()),    &nu52, SLOT( geklickt())  );
QObject::connect(n53, SIGNAL(clicked()),    &nu53, SLOT( geklickt())  );
QObject::connect(n54, SIGNAL(clicked()),    &nu54, SLOT( geklickt())  );
QObject::connect(n55, SIGNAL(clicked()),    &nu55, SLOT( geklickt())  );
QObject::connect(n56, SIGNAL(clicked()),    &nu56, SLOT( geklickt())  );
QObject::connect(n57, SIGNAL(clicked()),    &nu57, SLOT( geklickt())  );
QObject::connect(n60, SIGNAL(clicked()),    &nu60, SLOT( geklickt())  );
QObject::connect(n61, SIGNAL(clicked()),    &nu61, SLOT( geklickt())  );
QObject::connect(n62, SIGNAL(clicked()),    &nu62, SLOT( geklickt())  );
QObject::connect(n63, SIGNAL(clicked()),    &nu63, SLOT( geklickt())  );
QObject::connect(n64, SIGNAL(clicked()),    &nu64, SLOT( geklickt())  );
QObject::connect(n65, SIGNAL(clicked()),    &nu65, SLOT( geklickt())  );
QObject::connect(n66, SIGNAL(clicked()),    &nu66, SLOT( geklickt())  );
QObject::connect(n67, SIGNAL(clicked()),    &nu67, SLOT( geklickt())  );
QObject::connect(n70, SIGNAL(clicked()),    &nu70, SLOT( geklickt())  );
QObject::connect(n71, SIGNAL(clicked()),    &nu71, SLOT( geklickt())  );
QObject::connect(n72, SIGNAL(clicked()),    &nu72, SLOT( geklickt())  );
QObject::connect(n73, SIGNAL(clicked()),    &nu73, SLOT( geklickt())  );
QObject::connect(n74, SIGNAL(clicked()),    &nu74, SLOT( geklickt())  );
QObject::connect(n75, SIGNAL(clicked()),    &nu75, SLOT( geklickt())  );
QObject::connect(n76, SIGNAL(clicked()),    &nu76, SLOT( geklickt())  );
QObject::connect(n77, SIGNAL(clicked()),    &nu77, SLOT( geklickt())  );

nu01.On=0;
win->show();
    return a.exec();
}

Code: Alles auswählen

//my_class.h

#ifndef MY_CLASS_H
#define MY_CLASS_H
#include <QObject>
#include <iostream>



class my_class : public QObject {
   Q_OBJECT
   public:
     my_class(std::string, int, int); // Konstruktor
     ~my_class();
        void place( int, int);
        int On;

        int auslesenx();
        int ausleseny();
        std::string butname;
        int empfangenOn();
   public slots:
        void geklickt();
   signals:
        //void ausfuehren(int x, int y);

   private:
        int Placex;
        int Placey;

};

#endif


Code: Alles auswählen

//my_class.cpp

#include "my_class.h"

my_class::my_class(std::string a, int b, int c)
{
    butname=a;
    Placex=b;
    Placey=c;
    On==1;

}
my_class::~my_class()
{
}

int my_class::auslesenx()
{
    return Placex;
}

int my_class::ausleseny()
{
    return Placey;
}

void my_class::place(int x, int y)
{
    Placex=x;
    Placey=y;
}

void my_class::geklickt()
{
    int kordx;
    int zweite;
    if(my_class::nu01.empfangenOn()==0){zweite=0; kordx= my_class::nu01.Placex;}
}
int my_class::empfangenOn()
{
    return On;
}


1.Wie kann ich auf On von einer anderen Klasse zugreifen?
-> my_class::nu01.empfangenOn() funktionierte nicht
(1.Rot geschriebene auf dem Bild)
2.Wie kann ich ( meine bereits vorhandene) Funktion ,zur Überprüfung des Zuges, in einer Klasse öffnen?
(2.Rot geschriebene auf dem Bild)
3.Wie kann ich den Ort eines Buttons ändern
-> Zuerst layout->addWidget( n00 , 0, 0); -> aber wie kann man n00 per Slot z.B. nach (0,1) verschieben.
(3.Rot geschriebene auf dem Bild)
4. Kann ich die Buttonnamen durch Bilder ersetzen?

Ich wäre sehr dankbar wen jemand einer dieser Fragen beantworten könnte.

Jetzt schon mal Danke für eure Antworten, andi7
Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

Beitrag von Hulk2442 »

Morgen
Kennst du schleifen?
Damit läst sich die Komplexität deines Codes (bei gleicher Struktur) um einiges vereinfachen.

Jedoch würde ich an deiner stelle das ganze etwas anders aufteilen!
Benutze „main“ nur um das Programm zu starten und schmeiße alles andere in Klassen.
So kannst du einfacher und vor allem übersichtlicher darauf zugreifen.

Wieso willst du die Buttons verschieben?
Wenn du Schach spielst zersägst du auch nicht das Schachbrett und verschiebst das Feld inklusive der Figur.
Lass de Buttons wo sie sind und weise ihnen nur neue Icons [setIcon(neuesIcon)] hinzu.

Es macht auch nicht fiel Sinn das die Buttons das Spiel regeln und wissen ob der Platz schon besetzt ist oder die Bewegung erlaubt ist.

Versuche mal folgende Lösung umzusetzen/durchzudenken:

Code: Alles auswählen

+-------------+  +---------------------+  +------------------+  +-------------------+
|-- main.cc --|   |-- CChessBoard --|   |-- CChessMan --|   |-- CChessLogic --|
+-------------+  +---------------------+  +------------------+  +-------------------+ 
main- Ausgangsfunktion über welche das Spiel gestartet startet und beendet wird.
Ruft CChessBoard bord auf  CChessBoard::show()
CChessBoard - Das ist die Klasse welche vom QWidget abgeleitet ist und welche ein Layout sowie alle Felder und Spielfiguren besitzt. Diese managt das Spiel weis den Punktestand und führt die Züge aus (Neuverteilung der Icons).
CChessMan - Das ist eine Feld inklusive der Schachbrettfigur(Icon).
Es reagiert nur auf das klicken und annahmen von Werten  Wo bin ich und was befindet sich auf mir)
CChessLogic - Ein Klasse welche die Logik gespeichert hat und bestimmt welche Figur sich wie bewegen darf. Sie beantwortet die Frage: „Wohin dar das Pferd überall hin?“

Ich weis das ist nicht wirklich die Antwort auf deine Fragen jedoch glaube ich das es eine richtige Antwort ist.
Denn das alles ins main zu packen, das macht man nicht.

mfg
erpheus
Beiträge: 46
Registriert: 18. November 2008 11:55
Wohnort: Stuttgart

Beitrag von erpheus »

Hi andi,

zu deinem ersten roten Text.

Wenn ich dich richtig verstehe möchtest Du mit einem Objekt der Klasse x auf Daten eines anderen Objekts des selben Typs zugreifen.
Hirfür bäuchtest Du
1. entsprechende getter-Methoden
2. einen Pointer auf das jeweilige Objekt.
Das kann man zwar machen ist aber sehr sehr unschön. Wobei unschön heißt mächtig kompliziert, verwirrend und eigentlich ei Designfehler.

Verfolge besser den Rat von Hulk2442.

Wie weit kennst DU dich mit Klassen aus? Weißt Du beispielsweise was Memberfunktionen sind?

Schreib mal was die bezüglich Klassen nicht klar ist.

Grüßle
andi7
Beiträge: 11
Registriert: 18. August 2009 15:03

Beitrag von andi7 »

@erpheus & @Hulk2442: Danke vielmals für eure Antworten

Ich habe das Programm mal umgeschrieben, wie es mir Hulk2442 empfohlen hatte:

main

Code: Alles auswählen

#include <QApplication>
#include "my_class.h"
#include "CChessBoard.h"

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    CChessBoard* win = new CChessBoard;
    win->show();
    return a.exec();
}

my_class.h

Code: Alles auswählen

#ifndef MY_CLASS_H
#define MY_CLASS_H

#include <QObject>
#include <iostream>
 #include <QWidget>
#include <QtGui>



class my_class : public QObject {
   Q_OBJECT
   public:
     my_class(std::string, int, int); // Konstruktor
     ~my_class();
        void place( int, int);
        int On;

        int auslesenx();
        int ausleseny();
        std::string butname;
        int empfangenOn();
   public slots:
        void geklickt();
   signals:
        //void ausfuehren(int x, int y);

   private:
        int Placex;
        int Placey;
    }
#endif
my_class.cpp

Code: Alles auswählen

#include "my_class.h"

my_class::my_class(std::string a, int b, int c)
{
    butname=a;
    Placex=b;
    Placey=c;
    On==1;

}
my_class::~my_class()
{
}

int my_class::auslesenx()
{
    return Placex;
}

int my_class::ausleseny()
{
    return Placey;
}

void my_class::place(int x, int y)
{
    Placex=x;
    Placey=y;
}

void my_class::geklickt()
{
    int kordx;
    int zweite;
    if(my_class::nu01.empfangenOn()==0){zweite=0; kordx= my_class::nu01.Placex;}
}
int my_class::empfangenOn()
{
    return On;
}
CChessBoard.h

Code: Alles auswählen

#ifndef CCHESSBOARD_H
#define CCHESSBOARD_H
#include <QWidget>
#include "my_class.h"

class CChessBoard : public QWidget {
    Q_OBJECT
   public:
      CChessBoard(QWidget* parent = NULL); // Konstruktor
     ~CChessBoard();

}


#endif // CCHESSBOARD_H
CChessBoard.cpp

Code: Alles auswählen

#include "CChessBoard.h"
#include <QObject>
#include <iostream>
#include <QtCore>
#include <QtGui>


CChessBoard::CChessBoard(QWidget* parent) : QWidget(parent)
{
       QWidget* win = new QWidget;

my_class  nu00("TS1", 0, 0);

my_class  nu01("BS1", 1, 0);
nu01.empfangenOn();
my_class  nu02("OOO", 2, 0);
my_class  nu03("OOO", 3, 0);
my_class  nu04("OOO", 4, 0);
my_class  nu05("OOO", 5, 0);
my_class  nu06("BW1", 6, 0);
my_class  nu07("TW1", 7, 0);
my_class  nu10("SS1", 0, 1);
my_class  nu11("BS2", 1, 1);
my_class  nu12("OOO", 2, 1);
my_class  nu13("OOO", 3, 1);
my_class  nu14("OOO", 4, 1);
my_class  nu15("OOO", 5, 1);
my_class  nu16("BW2", 6, 1);
my_class  nu17("SW1", 7, 1);
my_class  nu20("LS1", 0, 2);
my_class  nu21("BS3", 1, 2);
my_class  nu22("OOO", 2, 2);
my_class  nu23("OOO", 3, 2);
my_class  nu24("OOO", 4, 2);
my_class  nu25("OOO", 5, 2);
my_class  nu26("BW3", 6, 2);
my_class  nu27("LW1", 7, 2);
my_class  nu30("DS1", 0, 3);
my_class  nu31("BS4", 1, 3);
my_class  nu32("OOO", 2, 3);
my_class  nu33("OOO", 3, 3);
my_class  nu34("OOO", 4, 3);
my_class  nu35("OOO", 5, 3);
my_class  nu36("BW4", 6, 3);
my_class  nu37("DW1", 7, 3);
my_class  nu40("KS1", 0, 4);
my_class  nu41("BS5", 1, 4);
my_class  nu42("OOO", 2, 4);
my_class  nu43("OOO", 3, 4);
my_class  nu44("OOO", 4, 4);
my_class  nu45("OOO", 5, 4);
my_class  nu46("BW5", 6, 4);
my_class  nu47("KW1", 7, 4);
my_class  nu50("LS2", 0, 5);
my_class  nu51("BS6", 1, 5);
my_class  nu52("OOO", 2, 5);
my_class  nu53("OOO", 3, 5);
my_class  nu54("OOO", 4, 5);
my_class  nu55("OOO", 5, 5);
my_class  nu56("BW6", 6, 5);
my_class  nu57("LW2", 7, 5);
my_class  nu60("SS2", 0, 6);
my_class  nu61("BS7", 1, 6);
my_class  nu62("OOO", 2, 6);
my_class  nu63("OOO", 3, 6);
my_class  nu64("OOO", 4, 6);
my_class  nu65("OOO", 5, 6);
my_class  nu66("BW7", 6, 6);
my_class  nu67("SW2", 7, 6);
my_class  nu70("TS2", 0, 7);
my_class  nu71("BS8", 1, 7);
my_class  nu72("OOO", 2, 7);
my_class  nu73("OOO", 3, 7);
my_class  nu74("OOO", 4, 7);
my_class  nu75("OOO", 5, 7);
my_class  nu76("BW8", 6, 7);
my_class  nu77("TW2", 7, 7);




QGridLayout* layout = new QGridLayout(win);
QPushButton* n00= new QPushButton("TS1");
QPushButton* n01= new QPushButton("BS1");
QPushButton* n02= new QPushButton("OOO");
QPushButton* n03= new QPushButton("OOO");
QPushButton* n04= new QPushButton("OOO");
QPushButton* n05= new QPushButton("OOO");
QPushButton* n06= new QPushButton("BW1");
QPushButton* n07= new QPushButton("TW1");
QPushButton* n10= new QPushButton("SS1");
QPushButton* n11= new QPushButton("BS2");
QPushButton* n12= new QPushButton("OOO");
QPushButton* n13= new QPushButton("OOO");
QPushButton* n14= new QPushButton("OOO");
QPushButton* n15= new QPushButton("OOO");
QPushButton* n16= new QPushButton("BW2");
QPushButton* n17= new QPushButton("SW1");
QPushButton* n20= new QPushButton("LS1");
QPushButton* n21= new QPushButton("BS3");
QPushButton* n22= new QPushButton("OOO");
QPushButton* n23= new QPushButton("OOO");
QPushButton* n24= new QPushButton("OOO");
QPushButton* n25= new QPushButton("OOO");
QPushButton* n26= new QPushButton("BW3");
QPushButton* n27= new QPushButton("LW1");
QPushButton* n30= new QPushButton("DS1");
QPushButton* n31= new QPushButton("BS4");
QPushButton* n32= new QPushButton("OOO");
QPushButton* n33= new QPushButton("OOO");
QPushButton* n34= new QPushButton("OOO");
QPushButton* n35= new QPushButton("OOO");
QPushButton* n36= new QPushButton("BW4");
QPushButton* n37= new QPushButton("DW1");
QPushButton* n40= new QPushButton("KS1");
QPushButton* n41= new QPushButton("BS5");
QPushButton* n42= new QPushButton("OOO");
QPushButton* n43= new QPushButton("OOO");
QPushButton* n44= new QPushButton("OOO");
QPushButton* n45= new QPushButton("OOO");
QPushButton* n46= new QPushButton("BW5");
QPushButton* n47= new QPushButton("KW1");
QPushButton* n50= new QPushButton("LS2");
QPushButton* n51= new QPushButton("BS6");
QPushButton* n52= new QPushButton("OOO");
QPushButton* n53= new QPushButton("OOO");
QPushButton* n54= new QPushButton("OOO");
QPushButton* n55= new QPushButton("OOO");
QPushButton* n56= new QPushButton("BW6");
QPushButton* n57= new QPushButton("LW2");
QPushButton* n60= new QPushButton("SS2");
QPushButton* n61= new QPushButton("BS7");
QPushButton* n62= new QPushButton("OOO");
QPushButton* n63= new QPushButton("OOO");
QPushButton* n64= new QPushButton("OOO");
QPushButton* n65= new QPushButton("OOO");
QPushButton* n66= new QPushButton("BW7");
QPushButton* n67= new QPushButton("SW2");
QPushButton* n70= new QPushButton("TS2");
QPushButton* n71= new QPushButton("BS8");
QPushButton* n72= new QPushButton("OOO");
QPushButton* n73= new QPushButton("OOO");
QPushButton* n74= new QPushButton("OOO");
QPushButton* n75= new QPushButton("OOO");
QPushButton* n76= new QPushButton("BW8");
QPushButton* n77= new QPushButton("TW2");






layout->addWidget( n00 , 0, 0);
layout->addWidget( n01 , 1, 0);
layout->addWidget( n02 , 2, 0);
layout->addWidget( n03 , 3, 0);
layout->addWidget( n04 , 4, 0);
layout->addWidget( n05 , 5, 0);
layout->addWidget( n06 , 6, 0);
layout->addWidget( n07 , 7, 0);
layout->addWidget( n10 , 0, 1);
layout->addWidget( n11 , 1, 1);
layout->addWidget( n12 , 2, 1);
layout->addWidget( n13 , 3, 1);
layout->addWidget( n14 , 4, 1);
layout->addWidget( n15 , 5, 1);
layout->addWidget( n16 , 6, 1);
layout->addWidget( n17 , 7, 1);
layout->addWidget( n20 , 0, 2);
layout->addWidget( n21 , 1, 2);
layout->addWidget( n22 , 2, 2);
layout->addWidget( n23 , 3, 2);
layout->addWidget( n24 , 4, 2);
layout->addWidget( n25 , 5, 2);
layout->addWidget( n26 , 6, 2);
layout->addWidget( n27 , 7, 2);
layout->addWidget( n30 , 0, 3);
layout->addWidget( n31 , 1, 3);
layout->addWidget( n32 , 2, 3);
layout->addWidget( n33 , 3, 3);
layout->addWidget( n34 , 4, 3);
layout->addWidget( n35 , 5, 3);
layout->addWidget( n36 , 6, 3);
layout->addWidget( n37 , 7, 3);
layout->addWidget( n40 , 0, 4);
layout->addWidget( n41 , 1, 4);
layout->addWidget( n42 , 2, 4);
layout->addWidget( n43 , 3, 4);
layout->addWidget( n44 , 4, 4);
layout->addWidget( n45 , 5, 4);
layout->addWidget( n46 , 6, 4);
layout->addWidget( n47 , 7, 4);
layout->addWidget( n50 , 0, 5);
layout->addWidget( n51 , 1, 5);
layout->addWidget( n52 , 2, 5);
layout->addWidget( n53 , 3, 5);
layout->addWidget( n54 , 4, 5);
layout->addWidget( n55 , 5, 5);
layout->addWidget( n56 , 6, 5);
layout->addWidget( n57 , 7, 5);
layout->addWidget( n60 , 0, 6);
layout->addWidget( n61 , 1, 6);
layout->addWidget( n62 , 2, 6);
layout->addWidget( n63 , 3, 6);
layout->addWidget( n64 , 4, 6);
layout->addWidget( n65 , 5, 6);
layout->addWidget( n66 , 6, 6);
layout->addWidget( n67 , 7, 6);
layout->addWidget( n70 , 0, 7);
layout->addWidget( n71 , 1, 7);
layout->addWidget( n72 , 2, 7);
layout->addWidget( n73 , 3, 7);
layout->addWidget( n74 , 4, 7);
layout->addWidget( n75 , 5, 7);
layout->addWidget( n76 , 6, 7);
layout->addWidget( n77 , 7, 7);

QObject::connect(n00, SIGNAL(clicked()),
                 &nu00,SLOT( geklickt() ));

QObject::connect(n01, SIGNAL(clicked()),&nu01, SLOT(geklickt()));
QObject::connect(n02, SIGNAL(clicked()),    &nu02, SLOT( geklickt())  );
QObject::connect(n03, SIGNAL(clicked()),    &nu03, SLOT( geklickt())  );
QObject::connect(n04, SIGNAL(clicked()),    &nu04, SLOT( geklickt())  );
QObject::connect(n05, SIGNAL(clicked() ) ,    &nu05, SLOT( geklickt())  );
QObject::connect(n06, SIGNAL(clicked()),    &nu06, SLOT( geklickt())  );
QObject::connect(n07, SIGNAL(clicked()),    &nu07, SLOT( geklickt())  );
QObject::connect(n10, SIGNAL(clicked()),    &nu10, SLOT( geklickt())  );
QObject::connect(n11, SIGNAL(clicked()),    &nu11, SLOT( geklickt())  );
QObject::connect(n12, SIGNAL(clicked()),    &nu12, SLOT( geklickt())  );
QObject::connect(n13, SIGNAL(clicked()),    &nu13, SLOT( geklickt())  );
QObject::connect(n14, SIGNAL(clicked()),    &nu14, SLOT( geklickt())  );
QObject::connect(n15, SIGNAL(clicked()),    &nu15, SLOT( geklickt())  );
QObject::connect(n16, SIGNAL(clicked()),    &nu16, SLOT( geklickt())  );
QObject::connect(n17, SIGNAL(clicked()),    &nu17, SLOT( geklickt())  );
QObject::connect(n20, SIGNAL(clicked()),    &nu20, SLOT( geklickt())  );
QObject::connect(n21, SIGNAL(clicked()),    &nu21, SLOT( geklickt())  );
QObject::connect(n22, SIGNAL(clicked()),    &nu22, SLOT( geklickt())  );
QObject::connect(n23, SIGNAL(clicked()),    &nu23, SLOT( geklickt())  );
QObject::connect(n24, SIGNAL(clicked()),    &nu24, SLOT( geklickt())  );
QObject::connect(n25, SIGNAL(clicked()),    &nu25, SLOT( geklickt())  );
QObject::connect(n26, SIGNAL(clicked()),    &nu26, SLOT( geklickt())  );
QObject::connect(n27, SIGNAL(clicked()),    &nu27, SLOT( geklickt())  );
QObject::connect(n30, SIGNAL(clicked()),    &nu30, SLOT( geklickt())  );
QObject::connect(n31, SIGNAL(clicked()),    &nu31, SLOT( geklickt())  );
QObject::connect(n32, SIGNAL(clicked()),    &nu32, SLOT( geklickt())  );
QObject::connect(n33, SIGNAL(clicked()),    &nu33, SLOT( geklickt())  );
QObject::connect(n34, SIGNAL(clicked()),    &nu34, SLOT( geklickt())  );
QObject::connect(n35, SIGNAL(clicked()),    &nu35, SLOT( geklickt())  );
QObject::connect(n36, SIGNAL(clicked()),    &nu36, SLOT( geklickt())  );
QObject::connect(n37, SIGNAL(clicked()),    &nu37, SLOT( geklickt())  );
QObject::connect(n40, SIGNAL(clicked()),    &nu40, SLOT( geklickt())  );
QObject::connect(n41, SIGNAL(clicked()),    &nu41, SLOT( geklickt())  );
QObject::connect(n42, SIGNAL(clicked()),    &nu42, SLOT( geklickt())  );
QObject::connect(n43, SIGNAL(clicked()),    &nu43, SLOT( geklickt())  );
QObject::connect(n44, SIGNAL(clicked()),    &nu44, SLOT( geklickt())  );
QObject::connect(n45, SIGNAL(clicked()),    &nu45, SLOT( geklickt())  );
QObject::connect(n46, SIGNAL(clicked()),    &nu46, SLOT( geklickt())  );
QObject::connect(n47, SIGNAL(clicked()),    &nu47, SLOT( geklickt())  );
QObject::connect(n50, SIGNAL(clicked()),    &nu50, SLOT( geklickt())  );
QObject::connect(n51, SIGNAL(clicked()),    &nu51, SLOT( geklickt())  );
QObject::connect(n52, SIGNAL(clicked()),    &nu52, SLOT( geklickt())  );
QObject::connect(n53, SIGNAL(clicked()),    &nu53, SLOT( geklickt())  );
QObject::connect(n54, SIGNAL(clicked()),    &nu54, SLOT( geklickt())  );
QObject::connect(n55, SIGNAL(clicked()),    &nu55, SLOT( geklickt())  );
QObject::connect(n56, SIGNAL(clicked()),    &nu56, SLOT( geklickt())  );
QObject::connect(n57, SIGNAL(clicked()),    &nu57, SLOT( geklickt())  );
QObject::connect(n60, SIGNAL(clicked()),    &nu60, SLOT( geklickt())  );
QObject::connect(n61, SIGNAL(clicked()),    &nu61, SLOT( geklickt())  );
QObject::connect(n62, SIGNAL(clicked()),    &nu62, SLOT( geklickt())  );
QObject::connect(n63, SIGNAL(clicked()),    &nu63, SLOT( geklickt())  );
QObject::connect(n64, SIGNAL(clicked()),    &nu64, SLOT( geklickt())  );
QObject::connect(n65, SIGNAL(clicked()),    &nu65, SLOT( geklickt())  );
QObject::connect(n66, SIGNAL(clicked()),    &nu66, SLOT( geklickt())  );
QObject::connect(n67, SIGNAL(clicked()),    &nu67, SLOT( geklickt())  );
QObject::connect(n70, SIGNAL(clicked()),    &nu70, SLOT( geklickt())  );
QObject::connect(n71, SIGNAL(clicked()),    &nu71, SLOT( geklickt())  );
QObject::connect(n72, SIGNAL(clicked()),    &nu72, SLOT( geklickt())  );
QObject::connect(n73, SIGNAL(clicked()),    &nu73, SLOT( geklickt())  );
QObject::connect(n74, SIGNAL(clicked()),    &nu74, SLOT( geklickt())  );
QObject::connect(n75, SIGNAL(clicked()),    &nu75, SLOT( geklickt())  );
QObject::connect(n76, SIGNAL(clicked()),    &nu76, SLOT( geklickt())  );
QObject::connect(n77, SIGNAL(clicked()),    &nu77, SLOT( geklickt())  );

nu01.On=0;
}
Leider bekomme ich folgende Compilerfehler:

Bild

Weiss jemand eine Lösung für diese Compilerfehler?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ich weis, du schreibst gerne viel. Aber beschäftige dich doch mal mit Schleifen, Listen, Arrays...
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Beitrag von MichaelS »

Moin,

hast Du die Compilermeldungen gelesen? Die sagen Dir nämlich, wo Dein Problem ist:
perhaps a semicolon is missing after the definition of 'my_class'
Außerdem solltest Du den Ratschlägen bezüglich der Schleifen befolgen. Den Quellcode kann doch keine Sau lesen. Und wenn Du schon dabei bist: befasse Dich auch einmal mit der Klasse QSignalMapper.

Gruß Michael
erpheus
Beiträge: 46
Registriert: 18. November 2008 11:55
Wohnort: Stuttgart

Beitrag von erpheus »

außerdem fehlt das Semikolon auch bei CChessBoard.h

Und falls Du grad auf dem Schlauch stehst was die Leut hier mit Schleifen zu meckern haben. Pack die Objekterzeugung der my_class und QPushbuttons in eine Schleife ebenso die Layout sachen. Wegen deinen connects siehe die Antwort von MichaelS. Das reduziert den Code auf rund 5 Zeilen.

Ist dir bezüglich Klassen mitlerweile alles klar oder brauchst Du da noch unterstützung.

Grüßle erpheus
andi7
Beiträge: 11
Registriert: 18. August 2009 15:03

Beitrag von andi7 »

Danke für eure Antworte, nachdem ich die 2 Fehler korigiert hatte, kam aber diese Fehlermeldung:

Bild

Könntet ihr mir bitte nochmals helfen?

Danke für ure Antworten
Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

Beitrag von Hulk2442 »

Morgen
Ich muss gestehen das ich immer noch nicht ganze verstehe was du mit diesem Codeteil bewirken willst

Code: Alles auswählen

…..
my_class  nu01("BS1", 1, 0); 
nu01.empfangenOn(); 
…
Deshalb habe ich dir einen kleinen dezenten Ansatz geschrieben was ich gemeint habe.

Das ganze ist noch lange nicht fertig so müsste z.B.: das „pField“ Objekte eine eigene Klasse besitzen und es sind auch keine Events vorhanden, jedoch ist es ein Fortschritt der dich, so glaube ich, weiterbringt.

Keine Ahnung wie gut du dich mit Array’s (in mehreren Dimensionen) und Schleifen auskennst. Wie du jedoch sehen kannst habe ich deinen Code um ein vielfaches von der Zeilenanzahl reduziert.
Bevor du weitermachst solltest du schauen das du das was hier steht komplett verstehst.
Denn es macht nicht allzu viel Sinn weiterzugehen wenn du die Grundstruktur von C++ nicht kennst auf der alles andere aufbaut.

main.cc

Code: Alles auswählen

#include <QApplication>

#include "CChessBoard.hh"

int main(int argc, char *argv[])
{
	QApplication a(argc, argv);

	CChessBoard* win = new CChessBoard;
	win->show();

	return a.exec();
}

CChessBoard.hh

Code: Alles auswählen

#ifndef CCHESSBOARD_HH
#define CCHESSBOARD_HH

#include <QWidget>
#include <QGridLayout>
#include <QPushButton>
#include <QPalette>

//#include <iostream>
//using namespace std;

class CChessBoard : public QWidget
{
	Q_OBJECT

	public:
		CChessBoard(QWidget* parent = NULL);	// Konstruktor
		~CChessBoard();

		QGridLayout *pGLayout;					// Layout von diesem Widget
		QPushButton *pField[8][8];				// Die einzelnen Felder
};

#endif // CCHESSBOARD_HH
CChessBoard.cc

Code: Alles auswählen

#include "CChessBoard.hh"

CChessBoard::CChessBoard(QWidget* parent):
	QWidget(parent)
{
	bool bWhite(true);
	for( int i(0); i<8; i++ )
	{
		for( int j(0); j<8; j++ )
		{
			pField[i][j] = new QPushButton;
			pField[i][j]->setText("OOO");
			pField[i][j]->setFixedSize(50, 50);

			//schwarz / weiss //
			if( true == bWhite )
			{
				pField[i][j]->setStyleSheet("background: white");		//weisser Hintergrund
				bWhite = false;
			}
			else
			{
				pField[i][j]->setPalette( QPalette(Qt::black) );		//schwarzer Hintergrund
				pField[i][j]->setStyleSheet("background: black");		//weisse Schreft
				bWhite = true;
			}
		}
		bWhite = !bWhite;
	}


	//schwarz
	pField[0][0]->setText("TS1");
	pField[0][1]->setText("SS1");
	pField[0][2]->setText("LS1");
	pField[0][3]->setText("DS1");
	pField[0][4]->setText("KS1");
	pField[0][5]->setText("LS2");
	pField[0][6]->setText("SS2");
	pField[0][7]->setText("TS2");

	pField[1][0]->setText("BS1");
	pField[1][1]->setText("BS2");
	pField[1][2]->setText("BS3");
	pField[1][3]->setText("BS4");
	pField[1][4]->setText("BS5");
	pField[1][5]->setText("BS6");
	pField[1][6]->setText("BS7");
	pField[1][7]->setText("BS8");


	//weiss
	pField[6][0]->setText("BW1");
	pField[6][1]->setText("BW2");
	pField[6][2]->setText("BW3");
	pField[6][3]->setText("BW4");
	pField[6][4]->setText("BW5");
	pField[6][5]->setText("BW6");
	pField[6][6]->setText("BW7");
	pField[6][7]->setText("BW8");

	pField[7][0]->setText("TW1");
	pField[7][1]->setText("SW1");
	pField[7][2]->setText("LW1");
	pField[7][3]->setText("DW1");
	pField[7][4]->setText("KW1");
	pField[7][5]->setText("LW2");
	pField[7][6]->setText("SW2");
	pField[7][7]->setText("TW2");


	//layout
	pGLayout = new QGridLayout;
	pGLayout->setSpacing(0);
	pGLayout->setMargin(0);

	for( int i(0); i<8; i++ )
	{
		for( int j(0); j<8; j++ )
		{
			pGLayout->addWidget( pField[i][j], i, j );
		}
	}

	this->setLayout(pGLayout);
}



CChessBoard::~CChessBoard()
{
}


andi7
Beiträge: 11
Registriert: 18. August 2009 15:03

Beitrag von andi7 »

@Hulk2442: Danke vielmals, du hast mir extrem geholfen. Merci.

Ich habe nur noch eine Frage: Wie kann ich anstatt des Textes, welche auf einem Button gezeigt werden, Buttonbilder einblenden für die jeweilige Figur?

Gruss Andi
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Schon mal in die Doku von QPushButton geschaut?
andi7
Beiträge: 11
Registriert: 18. August 2009 15:03

Beitrag von andi7 »

Tut mir leid, hatte die Bilder ins falsche Verzeichnis getan und darum funktionierte nie etwas, doch jetzt läuft alles super.

Nochmals Danke an alle die mir geholfen haben.
Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

Beitrag von Hulk2442 »

@andi7

Bitteschön
Kannst dan, wen's fertig bist, das fertige Programm posten!
Antworten