c++ - Qt:如何让mainWindow在centralwidget调整大小时自动调整大小?

标签 c++ qt opengl user-interface

我想让我的 CentralWidget 有一定的大小。我需要做什么才能使我的 mainWindow 沿着它的中央小部件调整大小?这是不起作用的代码:

int main (int argc, char **argv) {
    QApplication app(argc, argv);

    QGLFormat glFormat;
    glFormat.setVersion(4,2);
    glFormat.setProfile( QGLFormat::CompatibilityProfile);

    QGLWidget* render_qglwidget = new MyWidget(glFormat);

    QGLContext* glContext = (QGLContext *) render_qglwidget->context();
    glContext->makeCurrent();


    QMainWindow* mainWindow = new MyMainWindow();
    render_qglwidget->resize(720, 486);
    mainWindow->setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding));
    mainWindow->setCentralWidget(render_qglwidget);

    render_qglwidget->resize(720, 486);

    mainWindow->show();

    return app.exec();
}

打开的窗口会很小。

我可以使用设置主窗口的大小

 mainWindow->resize(720, 486);

并且centralwidget也会改变它的大小。但是中央小部件将被稍微压扁,因为主窗口的工具栏也位于这 486 像素内。

如何让主窗口自动调整大小?

最佳答案

您可以重新实现 QMainWindow::event() 以在中央小部件的大小发生变化时自动调整窗口大小:

bool MyMainWindow::event(QEvent *ev) {
    if(ev->type() == QEvent::LayoutRequest) {
        setFixedSize(sizeHint());
    }
    return result = QMainWindow::event(ev);
}

您还必须为中央小部件使用 setFixedSize() 而不仅仅是 resize()。当小部件放置在布局(这里是 QMainWindowLayout)内部时,后者几乎没用。

关于c++ - Qt:如何让mainWindow在centralwidget调整大小时自动调整大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9762299/

相关文章:

c++ - 库函数返回原始指针,我想使用智能指针

dl 库的 C++ 等效 Windows

c++ - 为什么我的 OpenGL 代码不工作

c++ - 奇怪格式的 GLbyte 数据——NPR 技术

c++ - 将成员函数传递给 QtConcurrent run()

opengl - 读取游戏(OpenGL 或 DirectX)屏幕上的像素

c++ - 将 std::u16string 写入文件?

c++ - 我怎么能期望谷歌测试多次失败?

c++ - 如何使用 QTest QBENCHMARK 宏结果作为单元测试中的参数

c++ - QMutableStringListIterator 的 QStringList "not a type"?