PDA

View Full Version : QGraphicsScene doesn't respond to mousePressEvent



Affenbrotbaum
21st January 2010, 07:54
Hey there,

I've been looking around and at the example but just can't figure out why my code won't accept the mousePressEvent. It would be great if someone could please have a look at it.

MainWindow.cpp


#include <QGraphicsTextItem>
#include <QGraphicsSceneMouseEvent>

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
ui->setupUi(this);
setupCalendar();
}

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

void MainWindow::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}

void MainWindow::setupCalendar(){
ui->CalendarView->setScene(&calendarScene);
ui->CalendarView->move(0,0);
ui->CalendarView->show();

initializeCalendarVariables();
drawGrid();
}

void MainWindow::initializeCalendarVariables(){
columns = 3;

interval = 15; // Minutes
boxHeight = 19;
dayStart = 9;
dayEnd = 17;

totalDayLength = dayEnd - dayStart;
horizontalLines = totalDayLength * (60 / interval) + 2; // 1 for the Heading and one for OB1
leftMargin = 35;
topMargin = 20;
columnWidth = 200;
totalWidth = columnWidth *columns; //left to right
totalHeight = boxHeight * horizontalLines; // total height
}

void MainWindow::drawGrid(){

QPen gridLinePen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);

//Horizontal Lines
for(int ii=0; ii <= horizontalLines; ii++){
calendarScene.addLine(leftMargin,ii*boxHeight,left Margin+totalWidth,ii*boxHeight,gridLinePen);
}

//Vertical Lines
for(int jj=0; jj <= columns; jj ++){
calendarScene.addLine(jj * columnWidth + leftMargin,0,jj*columnWidth + leftMargin,totalHeight,gridLinePen);
}
}

void MainWindow::mousePressEvent(QGraphicsSceneMouseEve nt *event)
{
QApplication::setOverrideCursor(QCursor(Qt::WaitCu rsor)); //Just for testing
}


MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QGraphicsScene>
#include <QGraphicsSceneMouseEvent>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();

protected:
void changeEvent(QEvent *e);
void mousePressEvent(QGraphicsSceneMouseEvent *);

private:
void initializeCalendarVariables();
void setupCalendar();

Ui::MainWindow *ui;
QGraphicsScene calendarScene;

//Calendar
void drawGrid();
int columns;

int interval;
int boxHeight;
int horizontalLines;
int leftMargin;
int topMargin;
int columnWidth;
int totalWidth; //left to right
int totalHeight; // total height
int dayStart;
int dayEnd;
int totalDayLength;

};

#endif // MAINWINDOW_H


Any ideas? I'm stomped. Thanks a lot already.
Alex

Affenbrotbaum
21st January 2010, 19:56
I just found a solution.
http://www.qtcentre.org/threads/22438-Mouse-hovering-or-press-event-not-working

Thanks