Qt - 如何在我的笔记本电脑上全屏显示QLabel?

时间:2017-06-06 09:15:47

标签: c++ qt

我有ui QButtonQLabel。我希望每当我按下按钮时,QLabel都会在我的笔记本电脑上全屏显示。

我尝试了以下代码:

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

我可以看到此功能被执行,但这并没有全屏显示我的标签。我做错了什么/缺少什么?

我正在使用QtCreator 3.5.1并使用内置的图形界面制作我的gui。

编辑:变量myImage是一个包含图片的QLabel

3 个答案:

答案 0 :(得分:5)

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

  

这是QWidget的默认类型。   这种类型的小部件是子小部件,如果他们有父级,和   独立窗口,如果他们没有父母。另请参阅Qt::WindowQt::SubWindow.

因此,解决方案是手动将标志更改为Qt::Window,如下所示:

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

Pre Qt 5.9用户可以使用以下内容:

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

请注意,在将窗口标记更改为documented by Qt后,您应该调用showFullScreen

  

注意:此函数在更改a的标志时调用setParent()   窗口,导致窗口小部件被隐藏。你必须调用show()来制作   小部件再次可见..

撤消最大化

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

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

Pre Qt 5.9用户可以使用以下内容:

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

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

答案 1 :(得分:1)

showMaximized和showFullScreens在QWidget上工作,有父(即实际的窗口,不包含小部件)。所以你的代码有几个不同的选项。

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

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

这将使Label占据整个屏幕。

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

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

不要再做第二次。

答案 2 :(得分:-1)

您是在主函数中调用MainWindow实例上的show()方法吗?这样的事情:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow window;

    window.showMaximized();

    return a.exec();
}