QT简易滑动界面

主要控件:QStackedWidget、QRadioButton、QPushButton

begin.h

#ifndef BEGIN_H
#define BEGIN_H

#include <QMainWindow>
#include <QMouseEvent>
#include <QStackedWidget>

namespace Ui {
class begin;
}

class begin : public QMainWindow
{
    Q_OBJECT

public:
    explicit begin(QWidget *parent = 0);
    ~begin();

private slots:
    void on_radioButton_1_clicked();
    void on_radioButton_2_clicked();
    void on_radioButton_3_clicked();

    void mousePressEvent(QMouseEvent *event);
    void mouseReleaseEvent();
    void mouseMoveEvent(QMouseEvent *event);

private:
    Ui::begin *ui;
    QPoint m_startPos;

};

#endif // BEGIN_H

 begin.cpp:

#include "begin.h"
#include "ui_begin.h"
#include <QDebug>
begin::begin(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::begin)
{
    ui->setupUi(this);
    ui->pushButton->setFocusPolicy(Qt::NoFocus);
    ui->pushButton_2->setFocusPolicy(Qt::NoFocus);
    ui->pushButton_3->setFocusPolicy(Qt::NoFocus);
    ui->radioButton_1->setFocusPolicy(Qt::NoFocus);
    ui->radioButton_2->setFocusPolicy(Qt::NoFocus);
    ui->radioButton_3->setFocusPolicy(Qt::NoFocus);

    // 设置初始界面和对应的radioButton状态
    ui->menu->setCurrentIndex(2);
    ui->radioButton_1->setChecked(true);
    ui->page1->show();
    ui->page2->hide();
    ui->page3->hide();
}

begin::~begin()
{
    delete ui;
}


void begin:: mousePressEvent(QMouseEvent *event)
{
    m_startPos = event->pos();
}

void  begin::mouseMoveEvent(QMouseEvent *event)
{
    if (event->buttons() & Qt::LeftButton)
    {
        int deltaX = event->pos().x() - m_startPos.x();
        if (deltaX < 0)
        {
            if(ui->menu->currentIndex() == ui->menu->count()-1)
                ui->menu->setCurrentIndex(0);
            else
                ui->menu->setCurrentIndex(ui->menu->currentIndex() + 1);
        }
        else if (deltaX > 0)
        {
            if(ui->menu->currentIndex() == 0)
                ui->menu->setCurrentIndex(ui->menu->count()-1);
            else
                ui->menu->setCurrentIndex(ui->menu->currentIndex() -1);
        }

        // 设置对应的radioButton为选中状态
        if(ui->menu->currentIndex() == 2)
            ui->radioButton_1->setChecked(true);
        else if(ui->menu->currentIndex() == 0)
            ui->radioButton_2->setChecked(true);
        else if(ui->menu->currentIndex() == 1)
            ui->radioButton_3->setChecked(true);
    }
}

void begin::mouseReleaseEvent()
{
        // 重置起始位置
m_startPos = QPoint();
}

void begin::on_radioButton_1_clicked()
{
    ui->page1->show();
    ui->page2->hide();
    ui->page3->hide();
}

void begin::on_radioButton_2_clicked()
{
    ui->page2->show();
    ui->page1->hide();
    ui->page3->hide();
}

void begin::on_radioButton_3_clicked()
{
    ui->page3->show();
    ui->page1->hide();
    ui->page2->hide();
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值