我想全屏显示MainWindow,其内容应根据显示器的大小调整大小:
我的MainWindow.ui
:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>820</width>
<height>651</height>
</rect>
</property>
<property name="windowTitle">
<string>metaio SDK – Qt Tutorials</string>
</property>
<widget class="QWidget" name="centralwidget">
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<layout class="QVBoxLayout" name="mainLayout">
<item alignment="Qt::AlignHCenter">
<widget class="QGraphicsView" name="graphicsView">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>1300</width>
<height>768</height>
</size>
</property>
<property name="resizeAnchor">
<enum>QGraphicsView::NoAnchor</enum>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="buttonLayout">
<item>
<widget class="QPushButton" name="quitTutorialButton">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>« Back</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
<slots>
<slot>on_load_arel()</slot>
<slot>on_load_file()</slot>
<slot>on_close_tab(int)</slot>
<slot>on_save_and_preview()</slot>
<slot>on_preview_channel()</slot>
</slots>
</ui>
我的MainWindow.cpp
的一些代码:
...
setupUi(this);
quitTutorialButton->setVisible(false);
QObject::connect(quitTutorialButton, SIGNAL(clicked()), this, SLOT(onQuitTutorialButtonClicked()));
m_pMenu = new Menu(this, this);
// Init the main view for the scene using OpenGL
QGLWidget *glWidget = new QGLWidget(QGLFormat(QGL::SampleBuffers));
m_pGraphicsView = graphicsView;
m_pGraphicsView->setScene(m_pMenu);
m_pGraphicsView->setViewport(glWidget);
m_pGraphicsView->setFrameShape(QFrame::NoFrame);
我的Menu.cpp
中的一些代码:
m_pWebView = new QGraphicsWebView();
addItem(m_pWebView);
m_pWebView->resize(1300, 768); // dont want this to be static
QObject::connect(m_pWebView, SIGNAL(linkClicked(const QUrl&)), this, SLOT(linkClicked(const QUrl&)));
QTimer::singleShot(20, this, SLOT(loadContent()));
请帮帮我。
修改
如果你看到,我已经以编程方式添加了QGraphicsWebView
。我在笔记本电脑上运行此解决方案,分辨率为1366 x 768。如果我想要使用整个屏幕空间,我必须为我的QGraphicsWebView
(最后添加评论的行)和我QGraphicsView
中的MainWindow.ui
提供尺寸。我想删除这个静态部分,并使其动态化。
答案 0 :(得分:1)
如果您正在使用QLayout
管理员,那么您需要做的就是将窗口状态设置为全屏:QWidget::setWindowState。布局管理员应该处理剩下的事情,很可能你需要设置间距并使用一些QSpacers
来准确地将元素放到你想要的位置。
答案 1 :(得分:1)
关于全屏问题:您是否尝试使用QMainWindow::showFullScreen()?
回复编辑:
我没有看到任何嵌套布局的原因,有点搞砸了。而不是
-- mainLayout
|-- graphicsView
|-- buttonLayout <- why layout only one element??
|-- quitTutorialButton
尝试使用这种更简单的布局
-- mainLayout
|-- graphicsView
|-- quitTutorialButton
然后,将更改固定大小的政策改为MinimumExpanding
。
最后的建议:由于您看起来像手工布置项目,永远不会手动插入最外层的布局。如果这样做,其中的元素将永远不会缩放到QMainWindow大小。
相反,右键单击中央窗口小部件的空白部分,选择Layout
,然后选择要应用的布局类型。这当然只适用于最外层的布局:对于剩下的内部布局,您可以像往常一样通过简单的拖放来添加它们。