当前位置: 首页 > news >正文

做网站为什么要用php框架北京官方seo搜索引擎优化推荐

做网站为什么要用php框架,北京官方seo搜索引擎优化推荐,网站优秀设计方案,嘉兴高端网站定制项目开发,想实现动态的显示按钮,考虑使用QStackedWidget做两个页面去切换。 首先,我们使用Qt ui 画出两个QStackedWidget的两个页面 要实现切换,我们只需要调用stackedWidget->setCurrentIndex(index)就行。 那么如何自动调…

项目开发,想实现动态的显示按钮,考虑使用QStackedWidget做两个页面去切换。

首先,我们使用Qt ui 画出两个QStackedWidget的两个页面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
要实现切换,我们只需要调用stackedWidget->setCurrentIndex(index)就行。
那么如何自动调用呢?
这时候,我们想到网页的正常操作。当鼠标在某个区悬浮超过固定时间时,将按钮显示出来,也就是切换页面。
这里我们遇到了个坑, Qt为了缩减资源消耗,只在鼠标按下才触发mouseMoveEvent!
切记修改MouseTracking属性,我们修改了整个ui的MouseTracking属性发现没有用???
查资料,需要将所有QWidget子节点全部赋值!

void setMouseTrackingRecursively(QWidget* widget) {if (widget == nullptr)return;widget->setMouseTracking(true);const QObjectList& children = widget->children();for (QObject* child : children) {if (child->isWidgetType()) {setMouseTrackingRecursively(qobject_cast<QWidget*>(child));}}
}

实现完成,发现还行,但是缺少点灵魂,动画太直接了。
好的,加动画属性:#include <QPropertyAnimation>
这玩意太多功能了,后期单独在写。

直接上代码:
endListDialog.h

#ifndef ENDLISTDIALOG_H
#define ENDLISTDIALOG_H#include <QDialog>
#include <QDebug>
namespace Ui {
class endListDialog;
}class endListDialog : public QDialog
{Q_OBJECTpublic:explicit endListDialog(QWidget *parent = nullptr);~endListDialog();private slots:void onHoverTimeout();
protected:void mouseMoveEvent(QMouseEvent *event);void switchPage(int index);
private:Ui::endListDialog *ui;bool isHovering;QTimer *timer;
};#endif // ENDLISTDIALOG_H

endListDialog.cpp

#include "endlistdialog.h"
#include "ui_endlistdialog.h"
#include <QTimer>
#include <QMouseEvent>
#include <QMessageBox>
#include <QPropertyAnimation>
bool bshow=false;//鼠标事件mouseMoveEvent必须按下才响应 为了实现将页面所有QWidget setMouseTracking属性赋值true
void setMouseTrackingRecursively(QWidget* widget) {if (widget == nullptr)return;widget->setMouseTracking(true);const QObjectList& children = widget->children();for (QObject* child : children) {if (child->isWidgetType()) {setMouseTrackingRecursively(qobject_cast<QWidget*>(child));}}
}//同理QWidget 透明设置
void setwindowOpacityRecursively(QWidget* widget) {if (widget == nullptr)return;widget->setMouseTracking(true);const QObjectList& children = widget->children();for (QObject* child : children) {if (child->isWidgetType()) {setwindowOpacityRecursively(qobject_cast<QWidget*>(child));}}
}/****************************/
//切换页面实现
//入参 index 页面 (这里偷懒直接写了固定的实现)
//输出 
/****************************/
void endListDialog::switchPage(int index)
{//我的ui QStackedWidget对象是stackedWidget_18,换成自己的QWidget *currentWidget = ui->stackedWidget_18->currentWidget();QWidget *nextWidget = ui->stackedWidget_18->widget(index);// 创建动画// 创建缩小动画QPropertyAnimation *fadeOutAnimation = new QPropertyAnimation(currentWidget, "geometry");fadeOutAnimation->setDuration(200);QRect originalGeometry = currentWidget->geometry();QRect targetGeometry;if(index==1){ //展示第二页时 将第一页缩小一点 targetGeometry = QRect(originalGeometry.x() +20,originalGeometry.y() ,originalGeometry.width()-40,originalGeometry.height());}else{//展示第一页时 将第二页放大一点 targetGeometry = QRect(originalGeometry.x() -20,originalGeometry.y() ,originalGeometry.width()+40,originalGeometry.height());}fadeOutAnimation->setStartValue(originalGeometry);fadeOutAnimation->setEndValue(targetGeometry);QPropertyAnimation *fadeInAnimation = new QPropertyAnimation(nextWidget, "windowOpacity");fadeInAnimation->setDuration(600);fadeInAnimation->setStartValue(0.0);fadeInAnimation->setEndValue(1.0);// 连接动画完成信号connect(fadeOutAnimation, &QPropertyAnimation::finished, this, [this, index]() {ui->stackedWidget_18->setCurrentIndex(index);});// 启动动画fadeOutAnimation->start();fadeInAnimation->start();
}endListDialog::endListDialog(QWidget *parent) :QDialog(parent),ui(new Ui::endListDialog)
{ui->setupUi(this);isHovering = false;timer = new QTimer();timer->setInterval(200); // 设置为 600 m秒connect(timer, &QTimer::timeout, this, &endListDialog::onHoverTimeout);setMouseTrackingRecursively(ui->widget);setwindowOpacityRecursively(ui->widget);
}endListDialog::~endListDialog()
{delete ui;
}//mouseMoveEvent的重写 ,千万记住setMouseTracking属性赋值true
//不然你只能按住才能触发 Qt为了缩减资源消耗默认赋值false
void endListDialog::mouseMoveEvent(QMouseEvent *event) {// 检查鼠标是否在 stackedWidget 内if (ui->stackedWidget_18->underMouse()) {// 鼠标在 stackedWidget 内部qDebug("Mouse is inside the stackedWidget");if (!isHovering) { // 仅在未悬浮时启动计时器isHovering = true;bshow=false;timer->start();}} else {// 鼠标不在 stackedWidget 内部qDebug("Mouse is outside the stackedWidget");if (isHovering) { // 仅在悬浮时停止计时器isHovering = false;timer->stop();switchPage(0);}}// 调用基类的 mouseMoveEventQDialog::mouseMoveEvent(event);
}void endListDialog::onHoverTimeout() {// 在这里执行悬浮超过3秒后的操作// 例如,显示提示信息// QMessageBox::information(this, "提示", "鼠标悬浮超过3秒!");if(!bshow){switchPage(1);bshow = true;}
}
http://www.mnyf.cn/news/41043.html

相关文章:

  • ps做网站界面推广软件的渠道有哪些
  • 网站开发建设公司360搜索引擎
  • pc网站建设的三大条件seo优化咨询
  • 南京企业网站设计制作国内最好用免费建站系统
  • 南阳专业网站建设价格soso搜搜
  • 西三旗网站建设百度广告屏蔽
  • 怎么使用模板建设网站百度推广登录后台
  • 有没有大人和小孩做的网站抖音推广合作方式
  • 云南网站建设快速优化搜索引擎推广排名
  • 网站备案成功然后怎么做外贸营销网站建站
  • 怎么样购买网站空间宁波seo排名外包
  • 想换掉做网站的公司seo是怎么优化
  • 谷歌英文网站推广页优化软件
  • 杭州搭建网站星巴克网络营销案例分析
  • 网站分哪些种类外贸网站
  • 国外做批发的网站百度学术论文官网入口
  • 三只松鼠网站开发模板seo新人培训班
  • 网站中flash怎么做站长工具使用方法
  • 政府门户网站建设最好的免费建站网站
  • 免费创建网站平台有哪些网店营销策略有哪些
  • 找网站开发新乡搜索引擎优化
  • 服务佳的广州网站建设seo外链推广平台
  • 昆山网站建设兼职怎么在百度上免费做广告
  • 网站建设的设计总结重庆seo研究中心
  • 滕州助企网站建设网络推广常见的方法
  • 昆明网站空间外呼系统电销
  • 网站 空间 备案排名函数rank怎么用
  • 免费 网站管理系统百度搜索风云排行榜
  • 视频网站做推广有没有效果营销推广的作用
  • wordpress 中文 404福清市百度seo