QWidget没有显示在整个屏幕上

3

我是Qt的新手,在我的应用程序中遇到了问题。以下是我尝试的内容。

我有一个QWidget类作为父类,该类上有一个网格布局。我将此小部件设置为主窗口的中心小部件(虽然此小部件未居中,但这件事情还是可以的)。

现在,我想将此小部件旋转90度,以便可以在横向模式下在设备上显示。因此,我创建了一个图形视图,并将此小部件添加到其中 (创建场景并将小部件添加到场景中,将场景分配给视图)。然后,将此图形视图旋转并使其成为中心部件。这很棒,非常居中,在设备上看起来也很好。

但在最终集成中,我们想要所有的QWidgets,因此Graphcis View不是一个选项。为解决这个问题,我在我的类内部创建了一个QWidget成员。将布局应用于它。将此小部件添加到graphicsView中并使我的类成为其父类。

这也有效,但与我在第一步中遇到的类似问题,它位于MainWindow的左上角并且不会居中。更糟糕的是,当在设备上部署时,它没有应用于整个屏幕。小部件位于左上角的某个部分,并带有滚动条!我甚至尝试将WindowState设置为最大化,但对其没有影响。

以下是我尝试过的内容:

该小部件在我的类中创建,并添加到Graphcis View中。此视图将我的类作为父级,可以使用旋转API进行旋转。

m_gridContainer = new QWidget();
m_gridContainer->setAutoFillBackground(true);
m_gridContainer->setPalette(blackPalette);
m_gridContainer->setLayout(m_grid);
m_gridContainer->setMinimumSize(480,265);

m_scene = new QGraphicsScene(0, 0, 480, 265);
m_window = new QGraphicsView(m_scene,this);
m_scene->setBackgroundBrush(brush);
m_window->setAlignment(Qt::AlignCenter);    
m_scene->addWidget(m_gridContainer,Qt::Widget);

在主窗口中使用它

m_window = new CMyWidget(label, m_txtBox->text());    
m_window->getRotatedWidget(90);
setCentralWidget(m_window);

我尽力了,但是这个小部件无法全屏显示(只显示在一个小区域),而且仍然有滚动条。 我不知道到底发生了什么。

1个回答

3

m_gridContainer是图形场景中的一个图形项,它不会接收到主窗口的调整大小事件。

您需要在CMyWidget上处理resizeEvent(),并相应地调整您的m_gridContainer的大小,例如:

void CMyWidget::resizeEvent ( QResizeEvent * event )
{
    m_gridContainer->resize(event->size());
}

顺便说一下,如果您正在处理移动设备上的旋转,Qt本身会管理它(通过调整主窗口的大小)。 您不需要在代码中处理它(实际上,您最终会得到一个看起来像已经旋转两次的小部件)。


谢谢!调整大小事件对我很有用。此外,我的小部件尺寸也有点混乱。:) 现在一切都解决了。我想看看主窗口的调整大小是如何工作的,网络上有没有相关示例?虽然这个不是针对移动设备的(它是一个定制设备),但如果Qt可以为我做这件事,那肯定比我的旋转逻辑更好!请告诉我是否有可用的示例。再次非常感谢。:) - undefined
实际上,不完全是Qt处理调整大小的。Qt本身会从操作系统接收到某种调整大小事件,并将其传递给您的小部件。 - undefined
好的。看起来在我们的情况下不太可能发生。根据我的队友们的说法,我们将不会得到任何类似的事件,所以我们必须自己解决。因此,我将坚持之前的解决方案。谢谢。 :) - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接