qt - Qt 中 setVisble 后不要立即重新绘制

标签 qt user-interface

我正在使用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次,这会导致像这样的奇怪效果: enter image description here

那么如何设置小部件在此循环期间不重新绘制?

提前致谢。

最佳答案

我认为您正在尝试解决错误的问题。您不应该像这样更新小部件。如果您一定愿意,那么在更改之前隐藏布局的父小部件并在之后再次显示应该可以。

更好的方法是使用 QStackedWidget并初步准备好所有板子。切换到不同的板只需切换事件小部件即可。

关于qt - Qt 中 setVisble 后不要立即重新绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10696218/

相关文章:

ios - Stripes iOS App 中使用的界面类型 iOS 界面

ruby-on-rails - 如何使用 Ruby/Rails 从网站获取内容?

python - Qt Tooltip如何防止内置延迟后文本消失?

c++ - 为什么 QML 会删除我的 C++ ListView 模型?

c++ - Qt tableView 在单元格中显示图像并在单击时获取路径

qt - 使用 drawBackground 在 QGraphicsView 上绘制背景

java - 如何将文本用户界面转换(或改编)为 GUI (Java)

python - 首先是 Tkinter 还是 PyQt?

java - 如何在 Swing Java GUI 应用程序中单击按钮时保持按下状态

c++ - QTreeWidget 使用拖放在两个项目之间插入