qt 旋转子窗口 基于QGraphicsView 实现

本示例展示了如何使用Qt实现3D界面的X、Y、Z轴旋转效果,包括单独及组合旋转,并提供了相关代码下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

感谢 Qt 示例里边的 Box 示例~~~~


上图! 不要被吓哭哦!




X轴旋转





XY轴一起旋转




XYZ轴一起旋转




YZ轴一起旋转


Y轴旋转


XZ轴一起旋转




Z轴旋转






GIF的图有点略多 大家谅解谅解~~~


上代码!!!


http://pan.baidu.com/s/1bE61w


(由于图太多 分层发布!)
求花 求顶 求精!


其实大家可以利用这个 把父窗口完全隐藏掉 然后利用子窗口来做主界面 


然后大家就可以想要什么旋转就怎么旋转了 是不是很厉害?


由于我的代码一些是书里边的额 一边是示例里边的 所以


楼主肯定写不出这么高级的东西



FROM: http://tieba.baidu.com/p/3467019595

Qt 5.15.2 中使用 `QGraphicsView` 和 `QGraphicsScene` 实时显示视频流,通常需要结合图像更新机制和视图刷新逻辑。以下是实现的基本方法: ### 1. 获取视频帧数据 可以使用多种方式获取实时视频流数据,例如: - 使用 OpenCV 的 `cv::VideoCapture` 捕获摄像头或视频文件。 - 使用 V4L2(Linux)或 DirectShow(Windows)等平台相关接口。 - 使用第三方库如 GStreamer 或 FFmpeg。 ```cpp #include <opencv2/opencv.hpp> ``` ### 2. 将视频帧转换为 QImage Qt 的 `QImage` 支持多种格式,可以从 OpenCV 的 `cv::Mat` 转换而来: ```cpp cv::Mat frame; cap >> frame; // 从摄像头读取帧 QImage image(frame.data, frame.cols, frame.rows, frame.step, QImage::Format_BGR888); ``` 如果使用的是灰度图像,则应使用 `QImage::Format_Grayscale8`,如果是 BGRA 格式则使用 `QImage::Format_ARGB32`。 ### 3. 创建 QGraphicsScene 并添加图像项 将 `QImage` 显示在 `QGraphicsScene` 中,需将其封装为 `QGraphicsPixmapItem`: ```cpp QGraphicsScene* scene = new QGraphicsScene(this); QGraphicsPixmapItem* pixmapItem = scene->addPixmap(QPixmap::fromImage(image)); ``` ### 4. 设置 QGraphicsView 显示场景 将创建的 `QGraphicsScene` 设置到 `QGraphicsView` 中,并调整视图参数: ```cpp QGraphicsView* view = new QGraphicsView(scene, this); view->setRenderHint(QPainter::Antialiasing); view->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); ``` ### 5. 定时刷新视频帧 为了实现实时显示,可使用 `QTimer` 定期更新图像内容: ```cpp QTimer* timer = new QTimer(this); connect(timer, &QTimer::timeout, this, [this, &cap, pixmapItem]() { cv::Mat frame; cap >> frame; if (frame.empty()) return; QImage image(frame.data, frame.cols, frame.rows, frame.step, QImage::Format_BGR888); pixmapItem->setPixmap(QPixmap::fromImage(image)); }); timer->start(30); // 每30毫秒更新一次 ``` ### 6. 处理图像旋转与缩放(可选) 如果视频方向不正确,可以通过 `QGraphicsPixmapItem::setRotation()` 进行调整;若需自适应窗口大小,可通过 `QGraphicsView::fitInView()` 实现自动缩放: ```cpp view->fitInView(pixmapItem, Qt::KeepAspectRatio); ``` ### 7. 多线程优化(推荐) 由于图像采集和 UI 更新可能影响主线程性能,建议将视频捕获部分放在线程中处理,并通过信号槽机制通知主线程更新界面。 ```cpp class VideoThread : public QThread { Q_OBJECT public: void run() override { cv::VideoCapture cap(0); while (!isInterruptionRequested()) { cv::Mat frame; cap >> frame; emit frameReady(frame); msleep(30); } } signals: void frameReady(cv::Mat frame); }; ``` 然后在主线程中连接该信号以更新图像。 ### 总结 使用 Qt 5.15.2 的 `QGraphicsView` 和 `QGraphicsScene` 实时显示视频流,核心在于将视频帧转换为 `QImage` 并通过 `QGraphicsPixmapItem` 添加至场景中。借助定时器或线程机制实现连续更新,从而达到流畅播放效果[^1]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值