我在扫雷游戏中使用QPushButton。
从简单模式更改为困难模式后,QPushButton的数量应该从 9x9 更改为 30x16。
因此,我在MainWindow的构造函数中将具有最大数字(硬模式)的QPushButton添加到GridLayout。
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 次,这会产生如下奇怪的效果:
那么如何在此循环期间设置小部件不重绘?
提前致谢。