signal-slot-verbindung funktioniert nicht
-
sudo rm -rf
- Beiträge: 28
- Registriert: 23. Dezember 2009 13:16
signal-slot-verbindung funktioniert nicht
Hallo,
ich bin gerade an meinem ersten größeren qt-projekt:
das strategiespiel risiko
das konsolenprogramm ist schon fertig
jetzt wollte ich es grafisch programmieren, da es in der konsole zwar spielbar ist, jedoch jeglichen spaß unnterbindet...
hier mein problem:
es sind drei klassen vorhanden: grafik, eingabe, risiko
alle drei klassen sind von QWidget abgeleitet.
in der main wird ein objekt spielfeld von grafik aufgerufen, spielfeld ruft ein objekt eingabefeld von eingabe auf und eingabefeld ruft ein objekt spiel von risiko auf.
eingabe hat einen button fertig, bei dessen SIGNAL(clicked()) der SLOT(slot_spielerwechsel()) aufgerufen werden soll, welcher in der klasse eingabe definiert ist.
in der main steht folgendes:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
grafik *spielfeld = new grafik;
spielfeld->eingabefeld->start();
QObject::connect(spielfeld->eingabefeld->fertig, SIGNAL(clicked), spielfeld->eingabefeld, SLOT(slot_spielerwechsel()));
spielfeld->show();
return app.exec();
}
weshalb geschieht nichts, wenn ich auf den button fertig klicke?
compiler(gcc)-meldung(während der laufzeit):
Object::connect: Parentheses expected, signal QPushButton::clicked
ich bin gerade an meinem ersten größeren qt-projekt:
das strategiespiel risiko
das konsolenprogramm ist schon fertig
jetzt wollte ich es grafisch programmieren, da es in der konsole zwar spielbar ist, jedoch jeglichen spaß unnterbindet...
hier mein problem:
es sind drei klassen vorhanden: grafik, eingabe, risiko
alle drei klassen sind von QWidget abgeleitet.
in der main wird ein objekt spielfeld von grafik aufgerufen, spielfeld ruft ein objekt eingabefeld von eingabe auf und eingabefeld ruft ein objekt spiel von risiko auf.
eingabe hat einen button fertig, bei dessen SIGNAL(clicked()) der SLOT(slot_spielerwechsel()) aufgerufen werden soll, welcher in der klasse eingabe definiert ist.
in der main steht folgendes:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
grafik *spielfeld = new grafik;
spielfeld->eingabefeld->start();
QObject::connect(spielfeld->eingabefeld->fertig, SIGNAL(clicked), spielfeld->eingabefeld, SLOT(slot_spielerwechsel()));
spielfeld->show();
return app.exec();
}
weshalb geschieht nichts, wenn ich auf den button fertig klicke?
compiler(gcc)-meldung(während der laufzeit):
Object::connect: Parentheses expected, signal QPushButton::clicked
-
sudo rm -rf
- Beiträge: 28
- Registriert: 23. Dezember 2009 13:16
ok, mir ist mein fehler gerade beim lesen meines beitrags aufgefallen:
SIGNAL(clicked) falsch //meine eigene dummheit
SIGNAL(clicked()) richtig
ich habe aber noch eine grundlegende frage:
wie zeichne ich ein dreieck mit drawPolygone( const QPoint * points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill )?
ich versteh dazu die doku nicht.
ich habe drei punkte x1/y1, x2/y2 und x3/y3
soll ich die als argumente mit komma getrennt übergeben?
doch was ist dann das alles:
int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill
ich bin für jede hilfe dankbar!
SIGNAL(clicked) falsch //meine eigene dummheit
SIGNAL(clicked()) richtig
ich habe aber noch eine grundlegende frage:
wie zeichne ich ein dreieck mit drawPolygone( const QPoint * points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill )?
ich versteh dazu die doku nicht.
ich habe drei punkte x1/y1, x2/y2 und x3/y3
soll ich die als argumente mit komma getrennt übergeben?
doch was ist dann das alles:
int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill
ich bin für jede hilfe dankbar!
-
sudo rm -rf
- Beiträge: 28
- Registriert: 23. Dezember 2009 13:16
-
sudo rm -rf
- Beiträge: 28
- Registriert: 23. Dezember 2009 13:16
so, mein risiko läuft
nur noch eine frage:
weshalb funktioniert die auskommentierte zeile nicht?
einheiten ist ein qlineedit feld
truppen ist ein int
feld_a ist ein lineedit feld
spieler_am_zug ist ein int
einheiten wird immer wieder auf "0" gesetzt, obwohl truppen[][] ungleich 0 ist.
nur noch eine frage:
weshalb funktioniert die auskommentierte zeile nicht?
Code: Alles auswählen
eingabefeld->einheiten->clear();
//eingabefeld->einheiten->insert(QString::number(eingabefeld->spiel->truppen[eingabefeld->feld_a->text().toInt() - 1][eingabefeld->spiel->spieler_am_zug]));
eingabefeld->activateWindow();
eingabefeld->einheiten->setFocus();truppen ist ein int
feld_a ist ein lineedit feld
spieler_am_zug ist ein int
einheiten wird immer wieder auf "0" gesetzt, obwohl truppen[][] ungleich 0 ist.
Code: Alles auswählen
eingabefeld->einheiten->insert(QString::number(eingabefeld->spiel->truppen[eingabefeld->feld_a->text().toInt() - 1][eingabefeld->spiel->spieler_am_zug]));Bitte berechne separat die biden Indize und hol dir mit denen dann den eigentlichen int aus dem Array. Jeweils ein kleines
qDebug() << "erster Index" << index1;
und du weißt was abgeht.
Wenn das Array eine Matrix ist (alle Zeilen sind gleich lang) und du das Array in der Klasse nie in der Größe veränderst, nimmst du vllt. besser eine QVector.
Auf die verschiedenen Zeilen der Matrix greifst du über einen Offset zu.
Code: Alles auswählen
const int rows = 10;
const int cols = 15;
QVector vec<int>( rows*cols );
int value = vec[3*cols + 5]; // Zeile 4, Spalte 6Code: Alles auswählen
template <typename ValueT, const uint rows, const uint cols>
class Matrix
{
ValueT[rows*cols];
public:
void setValue(uint row, uint col, const ValueT& val) throw (OutOfBound);
const ValueT& value(uint row, uint col) const throw (OutOfBound);
};-
sudo rm -rf
- Beiträge: 28
- Registriert: 23. Dezember 2009 13:16