我是一个 Qt 新手,我正在尝试使用 QGLWidget 和其他一些 UI 控件创建一个 Qt 应用程序。它在启动后短时间内崩溃。
以下是重现问题的步骤。
Mac 上的 Qt 5.0.1。
- 打开 QTCreator。基于 QMainWindow 类创建新项目。
将 opengl 添加到 .pro 文件:
QT += core gui opengl
创建从 QGLWidget 继承的简单 GLWidget 类(它什么都不做)
#pragma once #include <QGLWidget> class GLWidget : public QGLWidget { Q_OBJECT public: GLWidget() {}; };
在 Designer 中做一些事情:
- 在主窗口上放置三个垂直布局。
- 将它们组织在垂直拆分器中。
- 将 CentralWidget 布局设置为水平。
将 GLWidget 添加到窗口的 mainwindow.cpp 代码中的 MainWindow 构造函数中:
ui->verticalLayout_2->addWidget(new GLWidget);
跑。好的!
将 QTreeView 小部件拖放到设计器的左侧布局中。
再次运行...崩溃!
0 __pthread_kill 0x7fff83e5d212 1 pthread_kill 0x7fff8b77caf4 2 abort 0x7fff8b7c0dce 3 qt_message_fatal qlogging.cpp 868 0x101711a88 4 QMessageLogger::fatal qlogging.cpp 356 0x1017122ae 5 qt_assert_x qglobal.cpp 1959 0x10170ba5a 6 QWidget::mapTo qwidget.cpp 3866 0x10019dfb8 7 QFocusFramePrivate::updateSize qfocusframe.cpp 95 0x1003b5785 8 QFocusFrame::eventFilter qfocusframe.cpp 282 0x1003b6173 9 QCoreApplicationPrivate::sendThroughObjectEventFilters qcoreapplication.cpp 863 0x10198103c 10 QApplicationPrivate::notify_helper qapplication.cpp 3390 0x10015affb 11 QApplication::notify qapplication.cpp 3359 0x10015fb49 12 QCoreApplication::notifyInternal qcoreapplication.cpp 767 0x101980baf 13 QCoreApplication::sendSpontaneousEvent qcoreapplication.h 206 0x10016329f 14 QWidgetWindow::handleResizeEvent qwidgetwindow.cpp 448 0x1001e1ef5 15 QWidgetWindow::event qwidgetwindow.cpp 160 0x1001e0e18 16 QApplicationPrivate::notify_helper qapplication.cpp 3394 0x10015b025 17 QApplication::notify qapplication.cpp 2825 0x10015cb3f 18 QCoreApplication::notifyInternal qcoreapplication.cpp 767 0x101980baf 19 QCoreApplication::sendSpontaneousEvent qcoreapplication.h 206 0x100dfc6ff 20 QGuiApplicationPrivate::processExposeEvent qguiapplication.cpp 2169 0x100df8870 ... <More>
这是 QWidget::mapTo 函数中的断言:
QPoint QWidget::mapTo(const QWidget * parent, const QPoint & pos) const
{
QPoint p = pos;
if (parent) {
const QWidget * w = this;
while (w != parent) {
Q_ASSERT_X(w, "QWidget::mapTo(const QWidget *parent, const QPoint &pos)",
"parent must be in parent hierarchy");
p = w->mapToParent(p);
w = w->parentWidget();
}
}
return p;
}
我该如何解决这个问题?