视觉和交互参考前端element组件,使用Qt实现
element的Tabs效果
打算使用最简单的方式实现可滑动的Tabs,继承于QTabWidget,加入些动画效果绘制下划线就搞定了,是不是很简单。
没有截动态效果,可自己调试
但是其中也有些注意点,这里也是阅读qtabwidget.cpp和qstylesheetstyle.cpp源码解决
#include <QTabWidget>
#include <QVariantAnimation>
class TabBarAnimation;
class QSimpleSliderNavigation : public QTabWidget
Q_OBJECT
public:
QSimpleSliderNavigation(QWidget *parent = Q_NULLPTR);
~QSimpleSliderNavigation();
void setAnimationCurrentValue(int value);
protected:
void paintEvent(QPaintEvent *);
bool eventFilter(QObject *o, QEvent *e);
private:
void startAnimation(int beginX,int endX,int duration); // 先只考虑横向的
private:
TabBarAnimation *animation;
int m_animationX;
.cpp部分
#include "QSimpleSliderNavigation.h"
#include <QStyleOptionTabWidgetFrame>
#include <QStylePainter>
#include <QMouseEvent>
struct TabBarAnimation : public QVariantAnimation {
TabBarAnimation(QSimpleSliderNavigation* t) : tabs(t)
setEasingCurve(QEasingCurve::InOutQuad);
void updateCurrentValue(const QVariant ¤t) Q_DECL_OVERRIDE;
private:
QSimpleSliderNavigation* tabs;
void TabBarAnimation::updateCurrentValue(const QVariant ¤t)
if (tabs)
tabs->setAnimationCurrentValue(current.toInt());
//这里的 QTabWidget::pane {border: none;position: relative;top:2px;} 很重要,将pane的位置下移,这样绘制的下划线才能显示
QSimpleSliderNavigation::QSimpleSliderNavigation(QWidget *parent)
: QTabWidget(parent)
setStyleSheet("QTabWidget {background-color: rgb(238, 243, 250);} \
QTabWidget::pane {border: none;position: relative;top:2px;} \
QTabWidget::tab-bar {border: none;} \
QTabBar::tab {border: none;min-height: 28px;min-width: 85px;} \
QTabBar::tab:hover,QTabBar::tab:selected {color: rgb(88, 187, 228);} \
QTabBar::tab:!enabled {background-color: rgb(180, 180, 180);}");
tabBar()->installEventFilter(this);
animation = nullptr;
m_animationX = -1;
QSimpleSliderNavigation::~QSimpleSliderNavigation()
if (animation)
delete animation;
animation = nullptr;
bool QSimpleSliderNavigation::eventFilter(QObject *obj, QEvent *event)
if (obj == tabBar() && event->type() == QEvent::MouseButtonPress)
QMouseEvent *pMouseEvent = (QMouseEvent *)event;
if (pMouseEvent->button() == Qt::LeftButton)
const QPoint pos = pMouseEvent->pos();
int index = tabBar()->tabAt(pos);
if (index >= 0)
int curIndex = tabBar()->currentIndex();
if (index != curIndex)
startAnimation(tabBar()->tabRect(curIndex).x(), tabBar()->tabRect(index).x(), 250);
return false;
void QSimpleSliderNavigation::startAnimation(int beginX,int endX,int duration)
if (!animation)
animation = new TabBarAnimation(this);
animation->setStartValue(beginX);
animation->setEndValue(endX);
animation->setDuration(duration);
animation->start();
void QSimpleSliderNavigation::setAnimationCurrentValue(int value)
m_animationX = value;
update();
//绘制背景下划线和当前Index的下划线
void QSimpleSliderNavigation::paintEvent(QPaintEvent *event)
Q_UNUSED(event);
int index = tabBar()->currentIndex();
QRect rect = tabBar()->tabRect(index);
QStyleOptionTabWidgetFrame option;
initStyleOption(&option);
option.lineWidth = 0;
QStylePainter p(this);
option.rect = style()->subElementRect(QStyle::SE_TabWidgetTabPane, &option, this);
p.drawPrimitive(QStyle::PE_FrameTabWidget, option);
p.fillRect(QRect(option.rect.x(), rect.y() + rect.height(),option.rect.width(),1),QColor(228,231,237));
int x = (animation && animation->state() == QAbstractAnimation::Running) ? m_animationX : rect.x();
p.fillRect(QRect(x, rect.y() + rect.height(), rect.width(), 2), QColor(88, 187, 228));
视觉和交互参考前端element组件,使用Qt实现element的Tabs效果打算使用最简单的方式实现可滑动的Tabs,继承于QTabWidget,加入些动画效果绘制下划线就搞定了,是不是很简单。没有截动态效果,可自己调试但是其中也有些注意点,这里也是阅读qtabwidget.cpp和qstylesheetstyle.cpp源码解决.h文件#include &lt;QTabWidget...
jquery-ui-tabs-paging
从 code.google.com/p/jquery-ui-tabs-paging 自动导出
当标签不适合包含 UL 的宽度时,将显示“上一个”和“下一个”按钮以滚动标签。 特征 :
当窗口大小改变时自动调整大小。
下一个和上一个按钮是可配置的。
添加或删除选项卡时自动重新初始化分页(在 jQuery UI 1.9 中已弃用)
“下一步”按钮自动设置在距离 UL 右侧固定距离处。
使用 jQuery UI 主题进行测试
废话少说,直入主题,今天我们来实现一个时分秒滚动控件,类似前端组件
element时间控件
Qt实现的时间控件效果,因为不会传动态效果,所以看不到滚动效果,字体模糊是因为截图导致的,真实效果和饿了么类似。
注意本文只介绍了时分秒滚动区域的实现,只是当前日期组件的一部分,整个日期控件在后面的博客中介绍
QScrollTime有三个listview组成,分别是可滚动的时、分、秒区...
PYQT/QT 开发VUE GUI应用程序
框架完结,基于vue-element-admin开发
因为本人在对前端不是很熟悉, 只会做日常开发 可能很多地方表述不准请见谅
实际上开发起来还是比较割裂的,而且运行起来的顺滑度也没浏览器快的感觉,交互性能暂时没有测试
修改后的前端项目 已经上传到gitee
1. 测试效果
2. ELEMENT端修改
在vue-admin-template中clone代码, 根据markdown中文
本章主要介绍用处比较多的tab滑动从而达到窗体的切换功能,其功能类似与QTabWidget。实现的效果图如图所示:
其中tab滑动的效果实现是通过qt的动态框架实现的。
代码如下:
#ifndef TABCUSTOME_H
#define TABCUSTOME_H
#include
#include
class QPixmap;
class QPropertyAnimation;
因为业务原因,需要根据场景动态隐藏某个tab和显示某个tab,本着能不动手就不动手的原则我翻遍各大搜索引擎看到大部分人给出的解决方案的只是草草的说隐藏的时候remove,显示的时候再加回去,抱着白Piao的心态翻了3个小时由于半夜1点扛(Piao)不下去了,还是自己动手吧。
使用方式:
先给出示例,能对大家的胃口再白Piao寡人后面的代码。
ctrl+c,然后ctrl+v复制粘贴本文源代码,在QT设计师中将你自己得QTabWidget提升为本文...
文章目录Qt关于tabwidget的使用及注意事项版本说明目录一、需求和目的二、了解QTabWIDget类及用法1、详细描述2、注意事项三、使用实例四、最后
一、需求和目的
在一个界面上实现多窗口除了之前所说的MDI这种形式,还有比较常用的就是使用...