在主窗口内全屏显示QDialog,仅在某些情况下工作 (QC++ 4.8和Ubuntu 12.10统一的C++测试)< /P>
我有一个显示QDialog的主窗口。当我将对话框窗口置于全屏时,它似乎并不总是工作,即使它似乎是一个合适的窗口。 这意味着,窗口可以全屏显示,尽管只是有时 有人有主意吗?我知道Qt声明它可能不适用于所有X环境,但它不会那么糟糕,不是吗在主窗口内全屏显示QDialog,仅在某些情况下工作 (QC++ 4.8和Ubuntu 12.10统一的C++测试)< /P>,c++,qt,fullscreen,qdialog,C++,Qt,Fullscreen,Qdialog,我有一个显示QDialog的主窗口。当我将对话框窗口置于全屏时,它似乎并不总是工作,即使它似乎是一个合适的窗口。 这意味着,窗口可以全屏显示,尽管只是有时 有人有主意吗?我知道Qt声明它可能不适用于所有X环境,但它不会那么糟糕,不是吗 MainWindow::MainWindow(QWidget*父项): QMainWindow(父级), 用户界面(新用户界面::主窗口) { 用户界面->设置用户界面(此); QDialog*d=新的QDialog(); d->setModal(假); d->s
MainWindow::MainWindow(QWidget*父项):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
QDialog*d=新的QDialog();
d->setModal(假);
d->show();
qDebug()是窗口();
//大多数情况下都有效,但并非总是如此:
//d->showFullScreen();
//有时有效,有时无效:
QTimer::单镜头(2000,d,SLOT(showFullScreen());
}
我找到了一种有效的方法。我不知道为什么它比只调用showFullScreen()
更有效。我想这不是一个完美而干净的解决方案。这当然可以适应其他环境变量和X会话
QDialog* d = new QDialog();
d->setModal(false);
d->show();
const QString session = QString(getenv("DESKTOP_SESSION")).toLower();
QByteArray geometry;
if (session == "ubuntu") {
geometry = _d->saveGeometry();
d->setFixedSize(qApp->desktop()->size());
d->setWindowFlags(Qt::FramelessWindowHint);
d->setWindowState( d->windowState() | Qt::WindowFullScreen);
d->show();
d->activateWindow();
} else {
d->showFullScreen();
}
对于从全屏状态恢复,这是有效的
if (session == "ubuntu") {
d->setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
d->setMinimumSize(0,0);
d->restoreGeometry(geometry);
d->setWindowFlags(Qt::Dialog);
d->show();
d->activateWindow();
} else {
d->showNormal();
}
stackoverflow的DomTomCat展示了一种检测Ubuntu的方法,QDialog问题与Metacity(Ubuntu的默认窗口管理器)中的一个bug有关 Metacity管理对话框和主窗口的方式不同,它必须被欺骗,让它认为QDialog是一个普通窗口。为了使用QDialog类实现这一点,必须更改它的窗口标志 DomTomCat说,您可以检测会话,然后
//example inside the QDialog
this->setWindowFlags(Qt::Window);
this->showFullScreen();
这个bug以前被报告过(并被忽略),但据我所知,这是第一个简单的解决方法
Ubuntu也可以使用compiz。这可以在以下网址看到:
grep DefaultProvider-windowmanager /usr/share/gnome-session/sessions/*
致以最良好的祝愿
Iker De Echaniz。谢谢,我现在可以测试它了,它就像一个符咒一样工作