Qt小部件暂时全屏

6

考虑一个QWidget,通常是某个布局中的子项。

假设我想让它全屏一段时间,然后让它返回到原来的位置。

QWidget::setFullScreen() 要求该小部件必须是独立窗口 - 有什么办法解决吗?

2个回答

3
我认为最简单的方式是将其重新设置为0的父级。大致如下所示:

#include <QApplication>
#include <QPushButton>

class MyButton : public QPushButton
{
public:
   MyButton(QWidget* parent) : QPushButton(parent) {}

   void mousePressEvent(QMouseEvent*) {
      this->setParent(0);
      this->showMaximized();
      this->show();
   }
};

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

   QWidget mainWidget;
   MyButton button(&mainWidget);
   mainWidget.show();

   return a.exec();
}

1
很棒的答案!此外,如果小部件是主窗口或其他布局中的一部分,则应使用布局方法:“index = indexOf(this)”,当退出全屏模式时,可以通过调用包含布局的方法将小部件再次添加到主窗口中:“insertWidget(this,index)”。 - Gombat

1

我修改了之前的示例。之前的示例从未返回到正常屏幕。

只需复制粘贴代码即可运行。

        #include <QApplication>
        #include <QPushButton>

        class MyButton : public QPushButton
        {
        public:
           MyButton(QWidget* parent) : QPushButton(parent) {
               m_pParent = parent;
               maxMode = false;
           }
           QWidget * m_pParent;
           bool maxMode;
           Qt::WindowFlags m_enOrigWindowFlags;
           QSize m_pSize;

           void mousePressEvent(QMouseEvent*) {
               if (maxMode== false)
               {
                   m_enOrigWindowFlags = this->windowFlags();
                   m_pSize = this->size();
                    this->setParent(0);
                    this->setWindowFlags( Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
                    this->showMaximized();
                    maxMode = true;
               }
               else
               {
                   this->setParent(m_pParent);
                   this ->resize(m_pSize);
                   this->overrideWindowFlags(m_enOrigWindowFlags);
                   this->show();
                   maxMode =  false;
               }
           }
        };

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

           QWidget mainWidget;
           MyButton button(&mainWidget);
           mainWidget.show();

           return a.exec();
        }

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