Russian Qt Forum

Qt => Вопросы новичков => Тема начата: ann-joker от Апрель 20, 2012, 18:33



Название: 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]