qt 在mainwindow中,我有两个widget。在一个widget中,有一个按钮,按钮点击后会切换按钮上的文字。 我发现点击按钮会导致另外一个widget中会调用painEvent函数,产生了抖动闪屏的不好的效果, 但是我并不想有这样的问题,怎么解决
时间: 2024-03-12 20:49:19 浏览: 62
外部exe程序嵌入到Qt界面,点击按钮在QT中运行显示
这种情况可能是因为你在按钮点击事件中调用了整个窗口的 update() 函数,导致整个窗口的重绘,从而触发了另外一个 widget 的 paintEvent() 函数。你可以尝试在按钮点击事件中仅仅调用需要重绘的widget的 update() 函数来避免这个问题。具体实现可以参考下面的代码:
```cpp
void MyButton::onButtonClicked() {
// 切换按钮上的文字
if (text() == "Text1") {
setText("Text2");
} else {
setText("Text1");
}
// 重绘需要重绘的 widget
QWidget* targetWidget = ... // 获取需要重绘的 widget 的指针
targetWidget->update();
}
```
在上述代码中,MyButton 继承自 QWidget,是你的按钮所在的窗口部件,onButtonClicked() 是按钮的点击事件函数。在函数中,我们首先切换按钮上的文字,然后获取需要重绘的 widget 的指针,并调用它的 update() 函数来重绘它自己。这样就可以避免整个窗口的重绘,从而避免了抖动闪屏的问题。
阅读全文