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

要解析做邮箱以及网站营销型网页设计

要解析做邮箱以及网站,营销型网页设计,做cpa怎么建立自己网站,手机免费在线搭建网站这篇文章主要介绍了Qt实现界面滑动切换效果,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。 一、简述 一个基于Qt的动态滑动页面组件。 二、 设计思路 1、自定义StackWidget类,继承自QWidget,实现一个堆叠…

        这篇文章主要介绍了Qt实现界面滑动切换效果,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。

一、简述

          一个基于Qt的动态滑动页面组件。 

二、 设计思路

1、自定义StackWidget类,继承自QWidget,实现一个堆叠的窗口组件,可以在其中放置多个子窗口,只显示当前活动窗口。

2、使用QPropertyAnimation来设置界面切换动画。

三、效果 

四、核心代码  
1、头文件astackwidget.h
#include <QWidget>class QPropertyAnimation;
class AStackWidget : public QWidget
{Q_OBJECT
public:AStackWidget(QWidget *parent);~AStackWidget();public:int count() const;int currentIndex() const;int addWidget(QWidget *widget);int indexOf(QWidget *widget) const;int insertWidget(int index, QWidget *widget);QWidget *currentWidget() const;QWidget *widget(int index) const;void removeWidget(QWidget *widget);void setDuration(int duration);signals:void currentChanged(int index);void widgetRemoved(int index);public slots:void setCurrentIndex(int index);void setCurrentWidget(QWidget *widget);private slots:void onValueChanged(const QVariant &);void onMoveFinished();private:void moveAnimationStart();void setWidgetsVisible();protected:void resizeEvent(QResizeEvent *event);private:int m_offset;int m_curIndex;int m_lastIndex;int m_duration;QPropertyAnimation *m_moveAnimation;QList<QWidget *> m_widgetLst;
};
2、实现代码astackwidget.cpp
#include "astackwidget.h"
#include <QPropertyAnimation>AStackWidget::AStackWidget(QWidget *parent): QWidget(parent)
{m_offset = 0;m_curIndex = 0;m_lastIndex = 0;m_duration = 500;m_moveAnimation = new QPropertyAnimation(this, "");m_moveAnimation->setDuration(m_duration);connect(m_moveAnimation, &QPropertyAnimation::valueChanged, this, &AStackWidget::onValueChanged);connect(m_moveAnimation, &QPropertyAnimation::finished, this, &AStackWidget::onMoveFinished);
}AStackWidget::~AStackWidget()
{}int AStackWidget::count() const
{return m_widgetLst.size();
}int AStackWidget::currentIndex() const
{return m_curIndex;
}void AStackWidget::setDuration(int duration)
{m_duration = duration;
}int AStackWidget::addWidget(QWidget * widget)
{int index = indexOf(widget);if (index >= 0){return index;}widget->setParent(this);m_widgetLst.append(widget);return count() - 1;
}int AStackWidget::indexOf(QWidget * widget) const
{return m_widgetLst.indexOf(widget);
}int AStackWidget::insertWidget(int index, QWidget * widget)
{int curindex = indexOf(widget);if (curindex >= 0) {return curindex;}widget->setParent(this);m_widgetLst.insert(index, widget);return index;
}QWidget * AStackWidget::currentWidget() const
{if (m_curIndex >= 0 && m_curIndex < count()){return m_widgetLst.at(m_curIndex);}return 0;
}QWidget * AStackWidget::widget(int index) const
{if (index >= 0 && index < count()) {return m_widgetLst.at(index);}return 0;
}void AStackWidget::removeWidget(QWidget * widget)
{int index = indexOf(widget);if (index >= 0) {m_widgetLst.removeAll(widget);emit widgetRemoved(index);}
}void AStackWidget::setCurrentWidget(QWidget * widget)
{int index = indexOf(widget);if (index >= 0 && m_curIndex != index) {setCurrentIndex(index);}
}void AStackWidget::setCurrentIndex(int index)
{if (index >= 0 && m_curIndex != index) {m_lastIndex = m_curIndex;m_curIndex = index;	moveAnimationStart();emit currentChanged(index);}
}void AStackWidget::resizeEvent(QResizeEvent *event)
{QWidget::resizeEvent(event);int size = count();for (int i = 0; i < size; i++) {m_widgetLst.at(i)->resize(this->width(), this->height());}if (m_moveAnimation->state() == QAbstractAnimation::Running) {moveAnimationStart();}else {setWidgetsVisible();onValueChanged(0);}
}void AStackWidget::onValueChanged(const QVariant &value)
{m_offset = value.toInt();m_widgetLst.at(m_curIndex)->move(m_offset, 0);if (m_curIndex > m_lastIndex) {m_widgetLst.at(m_lastIndex)->move(m_offset - this->width(), 0);} else if (m_curIndex < m_lastIndex){m_widgetLst.at(m_lastIndex)->move(this->width() + m_offset, 0);}
}void AStackWidget::moveAnimationStart()
{m_moveAnimation->stop();setWidgetsVisible();int startOffset = m_offset;if (m_curIndex > m_lastIndex) {if (startOffset == 0) startOffset = this->width();else startOffset = this->width() - qAbs(startOffset);}else {if (startOffset == 0) startOffset = -this->width();else startOffset = qAbs(startOffset) - this->width();}m_moveAnimation->setDuration(qAbs(startOffset) * m_duration / this->width());m_moveAnimation->setStartValue(startOffset);m_moveAnimation->setEndValue(0);m_moveAnimation->start();
}void AStackWidget::setWidgetsVisible()
{int size = count();for (int i = 0; i < size; i++) {if (m_lastIndex == i || m_curIndex == i)m_widgetLst.at(i)->setVisible(true);else {m_widgetLst.at(i)->setVisible(false);}}
}void AStackWidget::onMoveFinished()
{//可在此添加动画结束后处理代码
}

QPropertyAnimation:动画类,如果仅控制一个界面的动画可以直接设置动画效果后,start函数启动动画效果。

StackedWidget:用于存储多个界面,当界面需要展示的时候可以通过setCurrentIndex展示当前页面。

五、使用示例

以下是一个简单的示例代码,演示了如何在Qt中实现滑动页面组件和多页面动态切换:

 1、实现步骤
  1. 在应用程序中创建 StackedWidget的对象
  2. 将多个子组件在容器对象中布局
  3. 将容器对象加入StackedWidget中生成新的页面
  4. 通过StackedWidget的setCurrentIndex切换页面。
 2、ui设计 frmastackwidget.ui

3、使用代码
#include "FrmAStackWidget.h"
#include <QButtonGroup>
#include <QLabel>FrmAStackWidget::FrmAStackWidget(QWidget *parent): QWidget(parent)
{ui.setupUi(this);QList<QString> colorlst;colorlst << "#1abc9c";colorlst << "#2ecc71";colorlst << "#3498db";colorlst << "#9b59b6";colorlst << "#e74c3c";QList<QPushButton *> btnlst;btnlst << ui.pushButton_1;btnlst << ui.pushButton_2;btnlst << ui.pushButton_3;btnlst << ui.pushButton_4;btnlst << ui.pushButton_5;QButtonGroup *btnGroup = new QButtonGroup(this);connect(btnGroup, SIGNAL(buttonClicked(int)), ui.aStackwidget, SLOT(setCurrentIndex(int)));for (int i = 0; i < 5; i++) {QLabel *label = new QLabel(ui.aStackwidget);label->setStyleSheet(QString("background-color:%1;color:#ffffff;").arg(colorlst.at(i)));label->setText(QString::number(i + 1));label->setAlignment(Qt::AlignCenter);int index = ui.aStackwidget->addWidget(label);btnGroup->addButton(btnlst.at(i), index);}
}

        这个示例只是一个基本的实现,实际应用中可能需要更复杂的逻辑来处理动画效果。 望大家看完这篇文章后可以实现自己的翻页动画效果。

六、源代码下载
http://www.tj-hxxt.cn/news/102179.html

相关文章:

  • 前端页面设计网站百度营销推广登录平台
  • dw建设动态网站的步骤关键词排名优化品牌
  • 花卉网站建设策划书网络热词2021
  • 网站主机名现场直播的视频
  • 杭州市城乡建设委员会的网站武汉推广服务
  • 网站建设总体目标电商网站开发平台有哪些
  • 为该网站做自适应长春seo排名收费
  • 网站做推广有用杭州网络优化公司排名
  • wordpress嵌入代码深圳seo优化排名公司
  • 做网站人家直接百度能搜到的北京疫情最新消息
  • 贵州国龙翔建设有限公司网站ip切换工具
  • 建设局网站作用搜索引擎优化的目的是对用户友好
  • 动态网站开发相关技术网站的网站建设
  • 网站开发开票税率鹤壁seo推广
  • 谷歌生成在线网站地图搜索网站排名优化
  • 视频网站开发报告网站优化排名提升
  • html论坛网站模板百度竞价价格查询
  • h5网站还有哪些长沙官网网站推广优化
  • 济南网站建设求职怎样在百度上发布信息
  • 网站建设如何记账亚马逊的免费网站
  • 专业网站设计报价网站优化员seo招聘
  • 帮朋友免费做网站台州百度快照优化公司
  • 做网站改字号代码电商代运营一般收多少服务费
  • 玩转wordpressseo优化推广
  • 网站布局设计自适应百度网盘客服24小时电话人工服务
  • html5素材网站厦门谷歌seo公司
  • 集团网站建设哪家更好软文营销的技巧
  • 做网站的团队业绩怎么写百度竞价系统
  • 防火墙 网站做端口映射兰州seo实战优化
  • 用帝国cms系统怎么做网站网页制作成品模板网站