zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Objective-C method及相关方法分析
    java对象和json数据转换实现方式1-使用json-lib实现
    java中TCP传输协议
    【剑指Offer学习】【面试题27:二叉搜索树与双向链表】
    4.2.2 MINUS
    Hadoop for .NET Developers
    在命名空间下定义类型
    Android NDK课程录制完毕上线
    全然同态加密
    从golang的垃圾回收说起(下篇)
  • 原文地址:https://www.cnblogs.com/findumars/p/5574432.html
Copyright © 2011-2022 走看看