当前位置: 代码迷 >> QT开发 >> 透过鼠标事件过滤器捕获鼠标滑动状态以实现单一窗口内的多页面跳转
  详细解决方案

透过鼠标事件过滤器捕获鼠标滑动状态以实现单一窗口内的多页面跳转

热度:35   发布时间:2016-04-25 04:12:55.0
通过鼠标事件过滤器捕获鼠标滑动状态以实现单一窗口内的多页面跳转
本帖最后由 vacancy14 于 2012-08-01 10:39:25 编辑
如标题所示,想完成此项功能,写了一个Demo,出现段错误,想请各位大虾指点一二。

#include "mainwidget.h"
#include "ui_mainwidget.h"

static QPoint pMouse;
static QPoint rMouse;
static int state = 1;
int MainWidget::iCurrentWidget = 1;

MainWidget::MainWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MainWidget)
{
    ui->setupUi(this);
    createWidget();
    insertWidget();
    initConnect();
    //setWidget(iCurrentWidget);
}

MainWidget::~MainWidget()
{
    delete ui;

}

//初始化widget栈中的对象,安装事件过滤器
void MainWidget::createWidget()
{
    w1 = new Widget_1();
    w2 = new Widget_2();
    w3 = new Widget_3();

    w1->installEventFilter(this);
    w2->installEventFilter(this);
    w3->installEventFilter(this);

}


//将widget对象插入栈中,设置初始widget
void MainWidget::insertWidget()
{
    ui->stackedWidget->insertWidget(1,w1);
    ui->stackedWidget->insertWidget(2,w2);
    ui->stackedWidget->insertWidget(3,w3);

    //ui->stackedWidget->setCurrentIndex(iCurrentWidget);
    ui->stackedWidget->setCurrentWidget(w1);
}

void MainWidget::initConnect()
{
    connect(w1,SIGNAL(goToWidget_1()),this,SLOT(goToWidget_1()));
    connect(w2,SIGNAL(goToWidget_2()),this,SLOT(goToWidget_2()));
    connect(w3,SIGNAL(goToWidget_3()),this,SLOT(goToWidget_3()));
}

int MainWidget::getCurrentWidgetIndex()
{
    return ui->stackedWidget->currentIndex();
}

void MainWidget::goToWidget_1()
{
    ui->stackedWidget->setCurrentWidget(w1);
    MainWidget::iCurrentWidget = this->getCurrentWidgetIndex();
}

void MainWidget::goToWidget_2()
{
    ui->stackedWidget->setCurrentWidget(w2);
    MainWidget::iCurrentWidget = this->getCurrentWidgetIndex();
}

void MainWidget::goToWidget_3()
{
    ui->stackedWidget->setCurrentWidget(w3);
    MainWidget::iCurrentWidget = this->getCurrentWidgetIndex();
}


void MainWidget::setWidget(int index)
{
    if(index == 1)
    {
        goToWidget_1();
    }

    if(index == 2)
    {
        goToWidget_2();
    }

    if(index == 3)
    {
        goToWidget_3();
    }
}

bool MainWidget::eventFilter(QObject *obj, QEvent *evt)
{
    if (!obj->isWidgetType())
    {
  相关解决方案