我正在使用QPushButton在我的扫地游戏中。
从简单模式更改为困难模式后,QPushButton的数量应该从9x9更改为30x16。
所以,我将最大数量的QPushButton(硬模式)添加到MainWindow构造函数中的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次,这会导致像这样的奇怪效果:
那么如何设置小部件在此循环期间不重新绘制?
提前致谢。
最佳答案
我认为您正在尝试解决错误的问题。您不应该像这样更新小部件。如果您一定愿意,那么在更改之前隐藏布局的父小部件并在之后再次显示应该可以。
更好的方法是使用 QStackedWidget并初步准备好所有板子。切换到不同的板只需切换事件小部件即可。
关于qt - Qt 中 setVisble 后不要立即重新绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10696218/