5
考慮一個QWidget,通常是一些Layout中的一個子項。Qt Widget暫時全屏
假設我想讓它全屏一段時間,然後讓它回到它的舊點。
QWidget::setFullScreen()
要求該小部件需要是一個獨立的窗口 - 任何想法如何解決它?
考慮一個QWidget,通常是一些Layout中的一個子項。Qt Widget暫時全屏
假設我想讓它全屏一段時間,然後讓它回到它的舊點。
QWidget::setFullScreen()
要求該小部件需要是一個獨立的窗口 - 任何想法如何解決它?
我能看到的最簡單的辦法就是重新設置父級爲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();
}
我已經修改了前面的例子。前面的例子永遠不會回到正常屏幕。
只需複製粘貼代碼,它就會運行。
#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();
}
很好的答案!另外,它也是一個mainWindow內佈局的一部分,所以你應該使用佈局方法:「index = indexOf(this)」,當轉換全屏模式時,你可以通過調用包含的佈局方法:「insertWidget(this,index)」。 – Gombat