请选择 进入手机版 | 继续访问电脑版

Qt实现窗口轮播效果

[复制链接]
西小妹谈娱 发表于 2021-1-1 10:31:14 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
效果图如下:

思路是将需要轮播的窗口重载一个类,放入QStackedWidget中,通过定时器和QPushButton控制QStackedWidget中的窗口切换实现轮播效果。
重载一个窗口类定名ImageItemWidget
轮播窗口类参数设置
  1. class ImageInfo{public:        QString logoPath;      //头像        QString nickName;       //头像说明        int64_t score;         //颜值public:        void clear() {                logoPath.clear();                nickName.clear();                score = 0;        }};
复制代码
轮播窗口类参数导入
  1. void ImageItemWidget::setValueAndStyle(ImageInfo pEvent){        QFontMetrics fm(ui.label_uname->font());        QString strElidedText = fm.elidedText(pEvent.nickName, Qt::ElideRight, 90, Qt::TextShowMnemonic);        ui.label_uname->setText(strElidedText);        QString grade = QString::number(pEvent.score);        ui.label_grade->setText(QStringLiteral("颜值:%1").arg(grade));        QString _logoPath = QStringLiteral(":/image/qrc/image/%1").arg(pEvent.logoPath);        QPixmap logo(_logoPath);        if (!logo.isNull()) {                ui.label_frame->setScaledContents(true);                ui.label_frame->setPixmap(logo);        }}
复制代码
创建显示轮播窗口类ImageCarouselWidget
  1. //数据        for (int i = 0; i < 5; i++)        {                ImageInfo _pInfo;                _pInfo.nickName = QStringLiteral("美女%1").arg(i + 1);                _pInfo.logoPath = QStringLiteral("%1.jpg").arg(i + 1);                _pInfo.score = 10000 + i * 1000;                m_imageItem = new ImageItemWidget();                m_imageItem ->setValueAndStyle(_pInfo);                ui.stackedWidget->insertWidget(i, m_annualItem);                m_ImageInfo.insert(i, _pInfo);        }
复制代码
轮播按钮创建
  1. void ImageCarouselWidget::initChangeButton(){        m_ChangeButtonGroup = new QButtonGroup();        int listCount = m_ImageInfo.count();        ui.horizontalLayout->addStretch();        for (int i = 0; i < listCount; i++)        {                //初始化轮播按钮                QPushButton* pButton = new QPushButton;                pButton->setFixedSize(QSize(13, 13));                pButton->setCheckable(true);                pButton->setStyleSheet("QPushButton{border-image:url(:/ToolTip/qrc/unselect1.png);}\                                QPushButton:checked{border-image:url(:/ToolTip/qrc/select1.png);}");                m_ChangeButtonGroup->addButton(pButton, i);                m_pChangeButtonList.append(pButton);                ui.horizontalLayout->addWidget(pButton);        }        ui.horizontalLayout->addStretch();        ui.horizontalLayout->setSpacing(20);        ui.horizontalLayout->setMargin(0);        //默认第一个显示        if (m_pChangeButtonList.size() > 0) {                m_pChangeButtonList[0]->setChecked(true);        }        connect(m_ChangeButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(sltSwitchButtonClicked(int)));}
复制代码
轮播按钮槽函数切换窗口实现
  1. void ImageCarouselWidget::sltSwitchButtonClicked(int index){        initChangeButtonCheckable(index);}void ImageCarouselWidget::initChangeButtonCheckable(int index){        if (m_pChangeButtonList.size() > index) {                m_pChangeButtonList[index]->setChecked(true);        }        m_carouselTimer.stop();        m_carouselTimer.start(3000);        ui.stackedWidget->setCurrentIndex(index);}
复制代码
创建并初始化定时器
  1.         m_carouselTimer.setTimerType(Qt::PreciseTimer);        connect(&m_carouselTimer, &QTimer::timeout, this, &vAnnualEvent::sltCarouselTimerOut);        m_carouselTimer.start(3000);
复制代码
定时器槽函数控制窗口轮播
  1. void ImageCarouselWidget::sltCarouselTimerOut(){        int pIndex= ui.stackedWidget->currentIndex();        int pCount = ui.stackedWidget->count();        // 获取下一个需要显示的页面索引        ++pIndex;        // 当需要显示的页面索引大于便是总页面时,切换至首页        if (pIndex>= pCount) pIndex= 0;        initChangeButtonCheckable(pIndex);        ui.stackedWidget->setCurrentIndex(pIndex);}
复制代码
来源:https://blog.csdn.net/qq_36651243/article/details/111987443
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )