qwidget::repaint: recursive repaint detected
时间: 2023-03-16 09:48:25 浏览: 172
这个错误提示是指在QWidget中进行重绘时,检测到了递归重绘的情况。这通常是由于在重绘事件中又触发了重绘事件,导致了无限循环的情况。解决方法是检查代码中是否存在这种递归调用的情况,避免重复触发重绘事件。
相关问题
QWidget::createWindowContainer 用法
`QWidget::createWindowContainer` 是一个静态函数,用于将 QWidget 转换为一个可以嵌入到其他窗口系统中的窗口容器。它的函数原型如下:
```cpp
QWidget *QWidget::createWindowContainer(QWidget *widget, QWidget *parent = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags());
```
其中,`widget` 是要转换的 QWidget 对象,`parent` 是容器的父窗口,如果没有指定,就会创建一个新的顶级窗口作为父窗口;`flags` 是容器的标志,它是一个按位或的枚举值,可以用来设置容器的各种属性,比如窗口样式、窗口标题等等。
使用 `createWindowContainer` 函数可以将一个 QWidget 对象转换为一个 `QWindow` 对象,从而可以将它嵌入到其他窗口系统中,比如 Qt Quick 中的 Item 或 QML 中的 Window。以下是一个简单的示例代码:
```cpp
// 创建一个 QWidget 对象
QWidget *myWidget = new QWidget();
// 将 QWidget 转换为 QWindow,并将它嵌入到一个 QML 窗口中
QQuickView *qmlView = new QQuickView();
QWindow *qmlWindow = qmlView->rootObject();
QWidget *container = QWidget::createWindowContainer(myWidget, qmlWindow);
qmlView->setContent(container);
qmlView->show();
```
在这个例子中,我们首先创建了一个 QWidget 对象 `myWidget`,然后将它转换为一个 QWindow,并将它嵌入到一个 QML 窗口中。最后,我们通过 `qmlView->setContent(container)` 将 QML 窗口的内容设置为容器,从而实现了将 QWidget 嵌入到 QML 窗口中的效果。
&QWidget::close;和QWidget::close();的区别
`&QWidget::close`和`QWidget::close()`的区别在于函数调用与函数指针的使用。
- `&QWidget::close`是获取`QWidget::close`函数的函数指针,并不会调用该函数。你可以将这个函数指针存储起来,然后在需要的时候通过指针调用该函数。
- `QWidget::close()`是直接调用`QWidget::close`函数。这种方式会立即执行`QWidget::close`函数中的代码。
所以,如果你想要获取函数指针而不是立即调用函数,你应该使用`&QWidget::close`。如果你想要立即调用函数并执行其中的代码,你应该使用`QWidget::close()`。