Название: if btn clicked a++
Отправлено: ann-joker от Апрель 20, 2012, 18:33
Пытаюсь сделать крестики нолики и самое важное не выходит. Вот: for (int i = 0; i < 3; i++){ for (int j = 0; j < 3; j++){ btn[i][j] = new QPushButton(""); grid->addWidget(btn[i][j],i,j); a[i][j] = 0; // if a = 1 - на клетке крестик, if a = 2 - нолик. QObject::connect(btn[i][j],SIGNAL(clicked()), this, SLOT(tictac())); }
}
void Tic::tictac(){ QPushButton *btn = qobject_cast<QPushButton*>(sender()); if (btn->text()==""){ if (pos%2 == 0){ btn->setText("X"); } else if (pos%2 == 1){ btn->setText("O"); } } pos++; }
пока просто без логики. как сделать, чтобы если эта кнопка нажата то соответствующее значение а менялось?
Название: Re: if btn clicked a++
Отправлено: kambala от Апрель 20, 2012, 19:38
как один из вариантов - записывать координаты в свойства кнопки и потом в tictac() считывать их и ставить соответствующие значения в качестве индексов a [code=cpp]btn[i][j]->setProperty("row", i); btn[i][j]->setProperty("col", j); пара замечаний: - родителя кнопкам лучше все-таки указать
- если текста нет на кнопке, то через "" его задавать и не нужно - там по умолчанию пусто. в крайнем же случае - использовать QString() вместо ""
- проверка на пустоту строки осуществляется через QString::isEmpty()
- для понятливости лучше задать enum для возможных значений массива a, например
C++ (Qt) enum { NOTHING = 0, CROSS, NIL };
[/code]
|