我有ui
QButton
和QLabel
。我希望每当我按下按钮时,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
答案 0 :(得分:5)
问题是你的QLabel
是另一个小部件的一部分,因此由于默认的Qt::Widget
标志而显示为子小部件:
这是
QWidget
的默认类型。 这种类型的小部件是子小部件,如果他们有父级,和 独立窗口,如果他们没有父母。另请参阅Qt::Window
和Qt::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();
}