私のシーンをクリックすると何も起こりません。私はQMouseEventとQGraphicsSceneMouseEventを使っていろいろなメソッドを試してみました。私のオブジェクトにフォーカスを当てて、それをクリックしようとしましたが結果はありませんでした。私はまた、他の人の投稿でインターネット上の解決策を探していましたが、私にとってはうまくいくものは見つかりませんでした。どこで私は間違いをするのですか?ここでQt:QGraphicsSceneMouseEventが機能しない
TrackWindow::TrackWindow(Timers *timer)
{
timeLineBar = new QGraphicsScene(this);
timeLineBarView = new QGraphicsView(timeLineBar);
timeLineBarView->setFixedHeight(20);
timeLineBarView->setAlignment(Qt::AlignTop|Qt::AlignLeft);
timeLineBarView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
timeLineBarView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
timeLineBarView->setStyleSheet("background-color: #333333; border:none;");
QVBoxLayout *timeLineLayout = new QVBoxLayout;
timeLineLayout->addWidget(timeLineBarView);
timeLineLayout->addWidget(tracksTimelineView);
timeline = new TimeLine(timer);
timeLineBar->addItem(timeline);
//timeline->setFlag(QGraphicsItem::ItemIsFocusable);
//timeline->setFocus();
}
は私です: - 私は私のマウスイベントに応答を作りたいと
これは私がシーン、ビューやオブジェクトを作成し、私の窓の一つ、次のとおりです。ここで
は、以下のいくつかのコードですタイムラインクラスの実装:
TimeLine::TimeLine(Timers *t)
{
timer = new Timers;
timer = t;
timeLineWidth = 200000;
timeLineScale = 0.1;
}
QRectF TimeLine::boundingRect() const
{
return QRectF(0,0,timeLineWidth,18);
}
void TimeLine::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
QRectF rect = boundingRect();
QPen pen(Qt::NoPen);
painter->setPen(pen);
painter->setBrush(QColor(200,200,200));
painter->drawRect(rect);
for(int i=0;i<200;i++)
{
painter->drawText(i*30,9,QString::number(i+1));
}
}
void TimeLine::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
timer->start();
}
}
そして、私のクラスのヘッダー:
#ifndef TIMELINE_H
#define TIMELINE_H
#include <QObject>
#include <QColor>
#include <QRect>
#include <QGraphicsRectItem>
#include <QPainter>
#include <QGraphicsSceneMouseEvent>
#include "timers.h"
class TimeLine: public QGraphicsRectItem
{
public:
TimeLine(Timers *t);
QRectF boundingRect() const;
void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget);
float timeLineScale;
int timeLineWidth;
void mousePressEvent(QGraphicsSceneMouseEvent * event);
private:
Timers *timer;
protected:
void mouseReleaseEvent(QGraphicsSceneMouseEvent * event);
};
#endif // TRACK_H
代わりに_QGraphicsView :: mousePressEvent_を試してください – scopchanov
私の例ではあなたのソリューションの使い方がわかりません。 –
あなたの目標は何ですか?あなたはマウスイベントを得ることができるときに何をしたいですか? QGraphicsItemには、異なる方法で処理されるいくつかのアクションがあります。 – eyllanesc