Я пытаюсь запрограммировать нарды в Qt Creator с помощью C++,
Это то, что я получил до сих пор, например, я создал различные Qgroupboxes grp_b1
, здесь у меня теперь 5 кнопок, которые представляют собой черные цифры в верхнем углу.
grid = new QGridLayout();
ui->grp_b1->setLayout(grid);
feld1=new QButtonGroup;
feld1_buttons[0]=ui->b1;
feld1_buttons[1]=ui->b2;
feld1_buttons[2]=ui->b3;
feld1_buttons[3]=ui->b4;
feld1_buttons[4]=ui->b5;
for(int i=0;i<5;i++)
{
feld1->addButton(feld1_buttons[i],i);
grid->addWidget(feld1_buttons[i]);
Хочу попросить помощи в разработке логики игры, не знаю как отследить нажатую кнопку.
Итак, когда я нажимаю кнопку, я получаю их идентификатор, но как я могу узнать, какое поле на самом деле нажимается? Потому что у меня много полей, и я могу знать только, какой идентификатор внутри каждого поля нажимается, но не поле.
Буду очень благодарен за любую помощь или предложение.
Вы можете вызвать метод sender()
в своем слоте, чтобы получить указатель объекта вызова. После этого получите родительский указатель, чтобы получить поле виджета.
Пример:
QObject* obj = sender();
QObject* parent =obj ->parent();
И сделать статическое приведение к виджету
Я обнаружил, попробовав это:
QObject* obj = sender();
это уже QButtonGroup, а не сама кнопка, поэтому она дает мне именно то, что мне нужно, это поле, которое было нажато.qDebug()<<signal_sender->objectName();
это дает мне имя используемого поля.