QT实现窗口缩放打开与关闭(重叠窗口,太有意思了)

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT实现窗口缩放打开与关闭(重叠窗口,太有意思了)相关的知识,希望对你有一定的参考价值。

基本思想:假设A为主窗口,B为子窗口。A打开或关闭时,先对A窗口进行截图,然后将图片部满整个B窗口的,在paintEvent里面进行动态缩放或放大画图。最后使用动画,将B窗口以动画的形式打开或关闭,动画播放完毕后,B发送一个信号给A,B关闭,A显示出来。

核心代码发下:

在A窗口里:

QPixmap pixmap;

    CTestDialog dlg(this);
    dlg.SetPixmap(pixmap.grabWidget(this));
    hide();
    dlg.exec();

 

B窗口:

CTestDialog::CTestDialog(QWidget *pParent) : QDialog(pParent)
{
    ui.setupUi(this);
    setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint); 
}

CTestDialog::~CTestDialog()
{
}

void CTestDialog::SetPixmap(const QPixmap &pixmap)
{
    m_backPixmap = pixmap;
    m_image = pixmap.toImage();
    update();

    QDesktopWidget *desktopWidget = QApplication::desktop();
    QRect screenRect = desktopWidget->screenGeometry();

    QPropertyAnimation *animation = new QPropertyAnimation(this, "geometry");
    animation->setDuration(2200);
    animation->setEasingCurve(QEasingCurve::OutBounce);
    animation->setStartValue(QRect((screenRect.width() - 50) / 2, (screenRect.height() - 50) / 2, 50, 50));
    animation->setEndValue(QRect((screenRect.width() - 500) / 2, (screenRect.height() - 400) / 2, 500, 400));
    animation->start();
}

void CTestDialog::paintEvent(QPaintEvent *p)
{
     QPalette pal(palette());
     pal.setBrush(QPalette::Window, QBrush(m_image.scaled(this->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)));
     setPalette(pal);
}

 
http://blog.csdn.net/itjobtxq/article/details/9663757

以上是关于QT实现窗口缩放打开与关闭(重叠窗口,太有意思了)的主要内容,如果未能解决你的问题,请参考以下文章

qt中如何创建2个窗口,点击窗口a上按钮打开窗口b,在b关闭前无法对a操作

QT下怎么实现一个窗口弹出来然后另外一个窗口关闭

Qt窗口关闭后重新打开

Qt3D:如何将 Scene2D 缩放为与窗口相同的大小(逐像素)?

Qt中如何利用 png 图片来实现自定义形状的窗口

如何在窗口中显示文件夹中所有文件的名称? Qt C++ [关闭]