mineSweeping ゲームでQPushButtonを使用しています。
イージーモードからハードモードに変更後、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 回呼び出され、次のような奇妙な効果が発生します。
では、このループ中にウィジェットを再描画しないように設定するにはどうすればよいですか?
前もって感謝します。