有输出QWidgetWindow(0x23408460070, name="FormWindow")
时间: 2023-07-06 10:38:53 浏览: 41
如果输出 `QWidgetWindow(0x23408460070, name="FormWindow")`,则说明窗口的指针有效,并且该窗口是一个 `QWidget` 对象。但是,`winId()` 方法返回的窗口标识符为 `0`,这可能是由于窗口尚未创建或者窗口已被销毁。您可以添加一些调试输出来进一步诊断问题。例如,您可以检查窗口的状态,看看它是否已经创建和显示。您可以使用以下代码:
```cpp
void Form::on_pushButton_clicked()
{
auto windows = qApp->allWindows();
qDebug() << "Number of Windows: " << windows.count();
for (auto window : windows)
{
auto qwidget = dynamic_cast<QWidget*>(window);
if (qwidget)
{
qDebug() << "Window Title: " << qwidget->windowTitle();
qDebug() << "isVisible(): " << qwidget->isVisible();
qDebug() << "winId(): " << qwidget->winId();
qDebug() << "isTopLevel(): " << qwidget->isTopLevel();
qDebug() << "geometry(): " << qwidget->geometry();
}
else
{
qDebug() << "Invalid Window Pointer: " << window;
}
}
}
```
在这个示例中,我们添加了一些调试输出来输出窗口的状态,包括 `isVisible()`,`winId()`,`isTopLevel()` 和 `geometry()`。如果窗口的 `isVisible()` 状态为 `false`,则说明窗口尚未显示。如果窗口的 `winId()` 返回的值为 `0`,则说明窗口尚未创建。如果窗口的 `isTopLevel()` 返回 `false`,则说明窗口不是顶级窗口,可能是一个子窗口或控件。如果窗口的 `geometry()` 返回的值为空,则说明窗口的几何形状尚未定义。您可以根据这些调试输出进一步诊断问题。