如何全屏显示QLabel?

问题描述 投票:0回答:3

我有一个

ui
,还有一个
QPushButton
和一个
QLabel
。我希望每当我按下该按钮时,
QLabel
都能在我的笔记本电脑上全屏显示。

我尝试了以下代码:

void MainWindow::on_fullScreenBtn_clicked()
{
    // ui->myImage is a QLabel*
    ui->myImage->setText("going full screen");
    ui->myImage->showMaximized();
    ui->myImage->QWidget::showFullScreen(); 
}

我可以看到这个函数被执行,但它没有全屏显示我的标签。我做错了什么/遗漏了什么?

我正在使用 Qt Creator 3.5.1 并使用内置图形界面制作 GUI。

c++ qt fullscreen qlabel
3个回答
7
投票

问题是您的

QLabel
是另一个小部件的一部分,因此由于默认的
Qt::Widget
标志而显示为子小部件:

这是

QWidget
的默认类型。 如果这种类型的小部件有父级,则它们是子小部件,并且 独立窗口(如果没有父窗口)。另请参阅
Qt::Window
Qt::SubWindow.

因此,解决方案是手动将标志更改为

Qt::Window
,如下所示:

ui->myImage->setWindowFlag(Qt::Window);

Qt 5.9 之前的用户可以使用以下功能:

ui->myImage->setWindowFlags(ui->myImage->windowFlags() | Qt::Window);

请注意,您应该在更改窗口标志后调用

showFullScreen
,如 Qt 记录的

注意:当更改某个对象的标志时,该函数会调用 setParent() 窗口,导致小部件被隐藏。您必须调用 show() 才能使 小部件再次可见..

撤消最大化

应删除窗口标志以撤消最大化。这可以按如下方式完成:

ui->myImage->setWindowFlag(Qt::Window, false); ui->myImage->show();

Qt 5.9 之前的用户可以使用以下功能:

ui->myImage->setWindowFlags(ui->myImage->windowFlags() & ~Qt::Window); ui->myImage->show();

请注意,如上所述,需要调用

show


1
投票
showMaximized 和 showFullScreens 在 QWidget 上工作,该 QWidget

有父级(是实际的窗口,不包含窗口小部件)。所以你的代码中有一些不同的选项。

1 - 仅使用您的 QLabel 创建 QStackedLayout 或 QStackedWidget,当您触发插槽时,请执行以下操作:

void MainWindow::on_fullScreenBtn_clicked() { ui->stackedWidget->setCurrentIndex( indexOfTheLabel); }

这将使标签占据整个屏幕。

2 - 您还可以删除 QLabel 的父级,但这会产生复杂的混乱,所以不要这样做。

void MainWindow::on_fullScreenBtn_clicked() { ui->myImage->setParent(nullptr); ui->myImage->setText("going full screen"); ui->myImage->showMaximized(); ui->myImage->showFullScreen(); }

不要做第二个。
    

您是否在 main 函数中调用 MainWindow 实例上的 show() 方法?类似这样的东西:

-1
投票
int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow window; window.showMaximized(); return a.exec(); }


© www.soinside.com 2019 - 2024. All rights reserved.