如何在持有QPushButton时重复功能?

时间:2014-07-27 15:38:38

标签: qt qpushbutton

我有以下代码:

void MainWindow::OnClicked()
{
     otesanek->setPos(otesanek->pos().x() + 5,otesanek->pos().y());
}

connect(right, SIGNAL(clicked()), this, SLOT(OnClicked()));

otesanek 是QGraphicsScene中的QGraphicsItem,是同一场景中的QPushButton

我的目标: 按住按钮(右),项目重复移动超过5像素,直到不按住按钮。

这段代码在做: 我必须一次又一次地点击以移动5个像素并再次移动5像素

我尝试使用OnPressed函数进行此操作,但我没有得到任何结果。

希望你理解我的问题 谢谢你的回答: - )

1 个答案:

答案 0 :(得分:0)

您可以使用QTimer重复调用班级中的插槽,并使用MousePressMouseRelease个事件来启动和停止QTimer

非常基本的例子:

<强> MyGraphicsView.h

#include <QGraphicsScene>
#include <QGraphicsView>
#include <QMouseEvent>
#include <QInputDialog>
#include <QGraphicsEllipseItem>
#include <QTimer>

class MyGraphicsView: public QGraphicsView
{
  Q_OBJECT
public:
  MyGraphicsView() {}
  MyGraphicsView( QGraphicsScene *scene, QWidget *parent = 0);
  ~MyGraphicsView() {};

public slots:
  void mousePressEvent( QMouseEvent * event );
  void mouseReleaseEvent( QMouseEvent * event );
  void moveItem();

private:
  QGraphicsEllipseItem *item;
  QTimer *timer;
};

<强> MyGraphicsView.cpp

#include "MyGraphicsView.h"

MyGraphicsView::MyGraphicsView( QGraphicsScene *scene, QWidget *parent) : QGraphicsView(scene,parent)
{
  item = new QGraphicsEllipseItem( 0, this->scene() );
  item->setRect( -50.0, -50.0, 100.0, 100.0 );
  item->setFlag( QGraphicsItem::ItemIsMovable );
  timer = new QTimer(this);
  connect(timer, SIGNAL(timeout()), this, SLOT( moveItem() ) );
}


void MyGraphicsView::mousePressEvent( QMouseEvent *  )
{
  timer->start(10);
}

void MyGraphicsView::mouseReleaseEvent( QMouseEvent * )
{
  timer->stop();
}

void MyGraphicsView::moveItem()
{
  item->setPos(item->pos().x() + 5,item->pos().y());
}

<强>的main.cpp

#include "MyGraphicsView.h"
#include <QApplication>


int main( int argc, char **argv )
{
  QApplication app(argc, argv);
  QGraphicsScene scene;
  scene.setSceneRect( -100.0, -100.0, 200.0, 200.0 );

  MyGraphicsView view( &scene );
  view.show();

  return app.exec();
}

这里两次重复之间的延迟是10 ms,您可以根据自己的喜好进行调整。我没有明确检查按下了哪个鼠标按钮,但您可以通过调用QMouseEvent::button ()并将其与Qt::MouseButton枚举进行比较来实现。

这有帮助吗?