mineSweeping 게임에서 QPushButton을 사용하고 있습니다.Qt에서 setVisble을 실행 한 직후에 다시 칠하지 마십시오.
easy 모드에서 하드 모드로 변경 한 후 QPushButton의 수가 9x9에서 30x16으로 변경됩니다.
그래서, 나는 MainWindow를의 생성자에서 GridLayout과에 QPushButton을 (하드 모드입니다) 가장 많은를 추가합니다.
btnArr = new QPushButton[HARD_WIDTH * HARD_HEIGHT]; // member element
int index = 0;
for (int i = 0; i < HARD_HEIGHT; ++i) {
for (int j = 0; j < HARD_WIDTH; ++j) {
ui->mainGrid->addWidget(&btnArr[index], i, j, 1, 1,
Qt::AlignCenter);
++index;
}
}
은 다음 사용자 변경 모드 (하드 모드로 예컨대 : 쉬운 모드), resetBtn(HARD_WIDTH, HARD_HEIGHT);
가 호출 될 경우.
void MainWindow::resetBtn(const int width, const int height)
{
int index = 0;
for (int i = 0; i < HARD_HEIGHT; ++i) {
for (int j = 0; j < HARD_WIDTH; ++j) {
if (j < width && i < height) {
btnArr[index].setVisible(true);
} else {
btnArr[index].setVisible(false);
}
++index;
}
}
}
문제
는 위젯이setVisible
를 호출 할 때마다 페인트 다시 보인다는 것이다. 그래서 하드 모드의 경우 30x16 번 호출되어 다음과 같은 이상한 결과를 초래합니다. 그래서이 루프 중에 다시 그리지 않는 위젯을 어떻게 설정할 수 있습니까?
미리 감사드립니다.
합리적인 것 같습니다. 고마워요! – Ovilia