程序运行截图如下:

原理:在Widget上面套一个QGraphicsView,把Widget放入QGraphicsProxyWidget,然后对QGraphicsProxyWidget操作即可!

源码如下:

ddisplaydialog.h

#ifndef DISPLAYDIALOG_H
#define DISPLAYDIALOG_H#include <QDialog>QT_BEGIN_NAMESPACE
class QGraphicsScene;
QT_END_NAMESPACEclass SSignalWidget;
class MyCustomProxy;namespace Ui {
class displayDialog;
}class displayDialog : public QDialog
{Q_OBJECTpublic:explicit displayDialog(QWidget *parent = 0);~displayDialog();protected:void initWidget();protected slots:void closeGraphicsWindows();private:Ui::displayDialog *ui;QGraphicsScene *m_scene;SSignalWidget *m_ssignalWidget;MyCustomProxy *m_myCustomProxy;
};#endif // DISPLAYDIALOG_H

mycustomproxy.h

#ifndef MYCUSTOMPROXY_H
#define MYCUSTOMPROXY_H#include <QGraphicsProxyWidget>QT_BEGIN_NAMESPACE
class QTimeLine;
QT_END_NAMESPACEclass MyCustomProxy : public QGraphicsProxyWidget
{Q_OBJECT
public:MyCustomProxy(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0);~MyCustomProxy();protected slots:void updateStep(int step);private:QTimeLine *m_timeLine;};#endif // MYCUSTOMPROXY_H

ssignalwidget.h

#ifndef SSIGNALWIDGET_H
#define SSIGNALWIDGET_H#include <QWidget>namespace Ui {
class SSignalWidget;
}class SSignalWidget : public QWidget
{Q_OBJECTpublic:explicit SSignalWidget(QWidget *parent = 0);~SSignalWidget();protected slots:void closeWindows();signals:void allWindowsClose();private:Ui::SSignalWidget *ui;
};#endif // SSIGNALWIDGET_H

displaaydialog.cpp

#include "displaydialog.h"
#include "ui_displaydialog.h"#include "mycustomproxy.h"
#include "ssignalwidget.h"#include <QDebug>
#include <QTransform>
#include <QGraphicsScene>
#include <QEventLoop>
#include <QTimer>displayDialog::displayDialog(QWidget *parent) :QDialog(parent),ui(new Ui::displayDialog)
{ui->setupUi(this);initWidget();showFullScreen();
}displayDialog::~displayDialog()
{delete ui;
}void displayDialog::initWidget()
{this->setWindowTitle("二次包含信号设置对话框");ui->graphicsView->setStyleSheet("background: transparent;border:0px");ui->graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);ui->graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);ui->graphicsView->setRenderHints(ui->graphicsView->renderHints()|QPainter::Antialiasing|QPainter::SmoothPixmapTransform);setWindowFlags(Qt::Window | Qt::FramelessWindowHint);setAttribute(Qt::WA_TranslucentBackground);m_scene = new QGraphicsScene;m_scene->setSceneRect(-500, -500, 500, 500);ui->graphicsView->setScene(m_scene);m_myCustomProxy = new MyCustomProxy;m_myCustomProxy->setWindowFlags(Qt::Window);//m_myCustomProxy->setFlags(QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable);m_ssignalWidget = new SSignalWidget;m_scene->addItem(m_myCustomProxy);m_myCustomProxy->setWidget(m_ssignalWidget);m_myCustomProxy->setPos(-m_ssignalWidget->width(), -m_ssignalWidget->height());ui->graphicsView->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);connect(m_ssignalWidget, SIGNAL(allWindowsClose()), this, SLOT(closeGraphicsWindows()));
}void displayDialog::closeGraphicsWindows()
{//延迟下,先让m_ssignalWidget关闭qDebug()<< "received closeSignal";QEventLoop loop;QTimer::singleShot(1000, &loop, SLOT(quit()));loop.exec();close();
}

main.cpp

#include "displaydialog.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);displayDialog w;w.show();return a.exec();
}

mycustomproxy.cpp

#include "mycustomproxy.h"
#include <QDebug>
#include <QTransform>
#include <QTimeLine>MyCustomProxy::MyCustomProxy(QGraphicsItem *parent, Qt::WindowFlags wFlags): QGraphicsProxyWidget(parent, wFlags)
{QTransform transform;setTransform(transform.rotate(90, Qt::XAxis));m_timeLine = new QTimeLine;m_timeLine->setFrameRange(90, 0);m_timeLine->setDuration(1500);connect(m_timeLine, SIGNAL(frameChanged(int)),this,SLOT(updateStep(int)));m_timeLine->start();
}MyCustomProxy::~MyCustomProxy()
{}void MyCustomProxy::updateStep(int step)
{QTransform transform;setTransform(transform.rotate(step, Qt::XAxis));
}

ssignalwidget.cpp

#include "ssignalwidget.h"
#include "ui_ssignalwidget.h"
#include <QEventLoop>
#include <QDebug>
#include <QTimer>SSignalWidget::SSignalWidget(QWidget *parent) :QWidget(parent),ui(new Ui::SSignalWidget)
{ui->setupUi(this);connect(ui->pushButton, SIGNAL(clicked(bool)), this, SLOT(closeWindows()));
}SSignalWidget::~SSignalWidget()
{delete ui;
}void SSignalWidget::closeWindows()
{emit allWindowsClose();QEventLoop loop;QTimer::singleShot(0.5 * 1000, &loop, SLOT(quit()));this->close();
}

Qt工作笔记-让界面飞一会(让界面旋转出来)相关推荐

  1. Qt工作笔记-发送端发送Json格式的数据包,接收端解析数据包

    原理以及运行 原理是因为QJsonDocument提供了一个函数toJson 可以直接把Json数据转成QByteArray,这样就可以直接发送数据包,然后再按照常规方法解析即可,本源码中含解析内容, ...

  2. Qt文档阅读笔记|Qt工作笔记-setupUi官方解析与实例(widgets中界面与业务分离)

    目录 前言 官方解析 模拟界面与业务分离过程 博主栗子 前言 在最开始创建Qt项目的时候,已经默认添加好了,现在来分析下,这么做有什么意义! 官方解析 void QWidget::setupUi(QW ...

  3. Qt工作笔记-通过C++使widgets与QQuick交互(包含qml界面对象与C++对象映射)

    目录 理论及程序运行 源码 理论及程序运行 这里要注意,通过qmlRegisterType函数去注册一个QML类! 下面再指明一个关键的问题,如何把QML界面的对象映射到C++呢! 可以有如下的处理: ...

  4. Qt工作笔记-3D效果唤出QWidgets界面(QGraphicsProxyWidget与QTimeLine)

    程序运行截图如下: 关键点一: ->:这个箭头表示左边的类是放到右边的类里面的 QWidget->QGraphicsProxyWidget QGraphicsProxyWidget-> ...

  5. Qt工作笔记-使用信号与槽让两个界面进行数据通信

    今天在项目中,发现有一个十分重要的功能,就是2个界面进行数据通信. 记得1年多前,刚刚学习Qt,对这个无法理解,然后经过一年多的学习和理解,在此把自己学习的感悟和知识在此总结下. 下面是使用emit ...

  6. Qt工作笔记-html做界面时,QFileInfo小技巧,获取前端页面

    目录 背景 演示及代码 总结 背景 有的时候要调用三方的库,能够比较简单的实现一些酷炫的效果.这里特别是前端的酷炫效果! 如果在Qt中,某个地方,能小范围使用前端Qt的效果,辣么,将会是一个多么有意思 ...

  7. Qt工作笔记-QML界面与QWidgets界面相互交互

    C++要做的事情: 1.QML中注册C++类型(qmlRegisterType) 2.获取元对象树,从中提取注册的指针[这样就和普通的对象一样了] qml要做的事情: 1.import注册的C++类型 ...

  8. Qt工作笔记-在界面上输出变量、类、this指针的地址

    思路: 地址就一4字节数,把其转10进制,再转成16进制就可以在界面上显示了. 程序运行截图如下: 源码如下: widget.h #ifndef WIDGET_H #define WIDGET_H#i ...

  9. Qt工作笔记-仿QQ登录界面(换肤,切换语言)

    本程序含有资源文件,和QSS,在此博文不在展示. 源码下载地址: https://download.csdn.net/download/qq78442761/10389816 程序运行截图如下: 本程 ...

最新文章

  1. 构建具有用户身份认证的 React + Flux 应用程序
  2. 数据库-null值处理及元数据
  3. vue怎么自己创建组件并引用_Vue 实现创建全局组件,并且使用Vue.use() 载入方式
  4. pythonurllib标准_Python标准库学习笔记 urllib模块
  5. 阿里云服务器搭配宝塔面板安装Redis为网站提速
  6. 浅谈Spark几种不同的任务提交相关脚本(以Spark 1.5.0为例)
  7. python集合排序_集合排序python
  8. 使用Unified Communications Managed API获取Lync在线会议的链接地址
  9. fingerprint模块管理指纹识别
  10. 中台战略:企业数字化转型利器
  11. 微信表情《程序员小黄第二季》上架啦!
  12. java课程论文_Java课程论文.doc
  13. 【杂记】EMC、EMI、EMS、TVS、ESD概念学习总结
  14. 单叶双曲面母直线参数的几何意义
  15. Xilinx Zynq ZynqMP boot模式
  16. linux 锐捷客户端 脚本,基于802.1x的锐捷linux客户端认证方法(最新)
  17. ubuntu下安装smba
  18. 如何构建产品帮助中心?
  19. 提取u-boot fw_env环境变量生成工具
  20. ACPI相关(6)- ACPI对USB的管理

热门文章

  1. [转]Android应用签名
  2. Visual Studio中相对路径中的宏定义,你不了解的宏定义都在这里!
  3. 软件开发中的资源控制问题学习
  4. 飞鸽传书:HTML界面也有它欠缺的方面
  5. EIM正在迎来自己的春天
  6. 第一课[编辑器设置-VC++6.0]
  7. 水滴石穿C语言之编译器引出的问题
  8. 别让Vue3.0的谣言害了你!
  9. 数学建模酶促反应matlab求解,数学建模——酶促反应.doc
  10. php实现mysql 数据迁移_php实现redis数据库指定库号迁移的方法