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

时间: 2024-10-06 00:23:31

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

C#中关闭第一个Form窗口,打开另一个新窗口方法

很多同学问怎么关闭一个FORM打开另一个新Form.这个问题最多的是在做登录验证时,使用第一个登录窗 登录成功后要关闭自己,然后打开新窗显示.没想到这个问题在.Net还成了问题,不过依然有很多方法解决. 典型的 Form1 f = new Form1(); f.Show(); this.Close(); 最后的关闭时把整个程序都关闭了 1隐藏法,原理就是把旧窗口隐藏掉,再打开新窗口. //新建一个NewForm窗口(NewForm是自己定义的Form) NewForm fm=new NewFor

从一个页面打开新窗口页面,当关闭新窗口页面时,刷新原本的页面的一个方法

开发中从一个页面打开新窗口页面,当关闭新窗口页面时,需要刷新原本的页面,找到了如下方法: A页面中: <a target="_blank"  href="B.aspx"></a> B页面中: <input type="button"  value="关闭" onclick="Close();" /> <script type="text/javascrip

JavaScript之窗口的打开与关闭

<html> <head> <title> damel3 </title> <style> #mywin{ display:none} </style> <script> function openwin(){ var win = document.getElementById("mywin"); win.style.display="block"; } function close

JS中用于打开、关闭、跳转页面的几个函数用法

window.open('url' , ' _self/_ blank):打开一个页面,属于window的函数 打开的页面对象.close():将打开的页面关闭 window.location.href = ' url ':跳到指定页面 window.history.back():回溯到上一个页面 window.history.go(参数):参数为正:跳到下几个页面:参数为负:跳到上几个页面 举个栗子: <html> <head> <meta charset="ut

设计一个多文档界面(MDI)应用程序,可以实现打开、排列和关闭子窗口。

首先 :我们要知道什么是多文档界面(MDI) 理论上说是"在多文档窗口环境下进行开发设计的,这种多文档界面称为多文档界面(mdi)" 通俗 的一点,我们最常见到的Excel表格就是mdi [我个人理解的图是这样的] 开始实际操作: 1.打开2个窗体[Form2为主窗体,Form2_son为子窗体] 2.在主窗体Form2中拖拉控件 MenuStrip(菜单栏) 设置form2的IsMdiContainer=True 3.在子窗体Form2_son中拖拉控件 RichTextBox  (

Qt浅谈之二十App自动重启及关闭子窗口(六种方法)

一.简介 最近因项目需求,Qt程序一旦检测到错误,要重新启动,自己是每次关闭主窗口的所有子窗口但有些模态框会出现问题,因此从网上总结了一些知识点,以备以后的应用. 二.详解 1.Qt结构 [cpp] view plaincopy int main(int argc, char *argv[]) { QApplication a(argc, argv); MyWidget w; MyDialog dialog;                      //新建MyDialog类对象 if(dia

Qt浅谈之二十App自动重启及关闭子窗口

一.简介 最近因项目需求,Qt程序一旦检测到错误,要重新启动,自己是每次关闭主窗口的所有子窗口但有些模态框会出现问题,因此从网上总结了一些知识点,以备以后的应用. 二.详解 1.Qt结构 [cpp] view plain copy int main(int argc, char *argv[]) { QApplication a(argc, argv); MyWidget w; MyDialog dialog;                      //新建MyDialog类对象 if(di

C#关闭一个窗口的同时打开另一个窗口

在.net的WinForm程序中,如果是直接起动的Form作为主窗口,那么这个主窗口是不能关闭的,因为它维护了一个Windows消息循环,它一旦关闭了就等于声明整个应用程序结束,所以新打开的窗口也就被自动关闭了.因此要关闭的窗口不能用Application.Run创建.要在关闭一个窗口的同时打开另一个窗口,可以按如下做法: 先在第一个窗口声明一个公共的bool变量并赋值为true: 如public bool closeflag = true;在program类里运行第二个窗口,主要代码:    

C#如何关闭一个窗口的同时打开另一个窗口

在.net的WinForm程序中,如果是直接起动的Form作为主窗口,那么这个主窗口是不能关闭的,因为它维护了一个Windows消息循环,它一旦关闭了就等于声明整个应用程序结束,所以新打开的窗口也就被自动关闭了.因此要关闭的窗口不能用Application.Run创建.如何使用Hide()(只是隐藏,其实进程还被占用着)之类或者Close()(这个操作会把所有窗体关闭,因为属于同一个线程)是达不到我们需要的效果的.要在关闭一个窗口的同时打开另一个窗口,可以按如下做法: 先在第一个窗口声明一个公共