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
  • 相关阅读:
    Windows 8实例教程系列 开篇
    qt 开发发布于 windeploy.exe
    qt qoci 测试验证
    vmware vmx 版本不兼容
    qt oracle
    vc qt dll
    QOCIDriver unable to create environment
    qoci 编译完 放置位置 具体根据情况
    calling 'lastError' with incomplete return type 'QSqlError' qsqlquer
    Hbase 操作工具类
  • 原文地址:https://www.cnblogs.com/findumars/p/5574432.html
Copyright © 2011-2022 走看看