日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt工作笔记-让界面飞一会(让界面旋转出来) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

程序運行截圖如下:

原理:在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工作笔记-让界面飞一会(让界面旋转出来)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。