PDA

View Full Version : To set focus on circumference circles when key is pressed



soumya
19th February 2010, 04:50
Hi All,

When key is pressed i need to get a focus on smaller circles which is on the circumference of big circle as shown in the attachment .When i press F11 key it should rotate in anticlockwise directions form right hole to next hole similarly if i press F10 key it should rotate in clockwise direction form right hole to previous hole. I have written the code for it its entering the particular function i am getting the debug message on the console but its not getting focused on smaller circles.

Here is the .cpp code as shown below,

[CODE]
void circleForm::keyPressEvent( QKeyEvent *event )
{
// qDebug( "Key Press Event" );
switch ( event->key() )
{
case Qt::Key_F11:
nextBoltHoleCircle = TRUE;
break;
case Qt::Key_F10:
prevBoltHoleCircle = TRUE;
break;
case Qt::Key_Enter:
needToDrawCircle = TRUE;
break;
default:
QWidget::keyPressEvent(event);
}
}


void circleForm::PaintEvent(QPaintEvent *event){
QDialog::PaintEvent(event);
if(needToDrawCircle){
QPainter painter(this);
painter.setPen(QPen(Qt::blue, 1, Qt:ashDotDotLine));
painter.drawLine(0,180,380,180);//horizontal line
painter.drawLine(190,0,190,360);//vertical line
painter.setPen(QPen(Qt::black, 2, Qt::SolidLine));

int framecentre_x = 190;
int framecentre_y = 180;
painter.drawPoint(framecentre_x,framecentre_y);//centrepoint
painter.drawEllipse(framecentre_x-100,framecentre_y-100,200,200);//big circle(90,80)
int i;
double x;
angle = 360.00/Hol;
for(i = 0;i < Hol;i++ ){
x = (angle * i);
qDebug(" x = %lf\n",x);
xangle = (x * PI)/180;
qDebug("xangle = %lf",xangle);
xcordinate = cosine(xangle);
qDebug("xcordinate = %lf",xcordinate);
yangle = (x * PI)/180;
qDebug("yangle = %lf",yangle);
ycordinate = sine(yangle);
qDebug("ycordinate = %lf",ycordinate);
painter.setPen(QPen(Qt::black, 2, Qt::SolidLine));
painter.drawEllipse((190 + 100 * xcordinate)- 10,(180 + 100 * ycordinate)- 10,20,20);//working
}
painter.setBrush(QBrush(Qt::red, Qt::SolidPattern));
painter.drawEllipse((190 + 100 * 1)- 10,(180 + 100 * 0)- 10,20,20);

}
needToDrawCircle = FALSE;

if(prevBoltHoleCircle){
QPainter painter(this);
qDebug("painting bolt hole circle\n");
qDebug("xcordinate = %lf",xcordinate);
qDebug("ycordinate = %lf",ycordinate);
painter.setBrush(QBrush(Qt::blue, Qt::SolidPattern));
painter.drawEllipse((190 + 100 * xcordinate)- 10,(180 + 100 * ycordinate)- 10,20,20);
qDebug("PREVIOUS\n");

}
prevBoltHoleCircle = FALSE;
if(nextBoltHoleCircle){
QPainter painter(this);
qDebug("painting bolt hole circle\n");
qDebug("xcordinate = %lf",xcordinate);
qDebug("ycordinate = %lf",ycordinate);
painter.setBrush(QBrush(Qt::blue, Qt::SolidPattern));
painter.drawEllipse((190 + 100 * xcordinate)- 10,(180 + 100 * ycordinate)- 10,20,20);
qDebug("NEXT\n");

}
nextBoltHoleCircle = FALSE;
}


Sould i use signal slot mechanism ???..To draw a big circle on the frame i had used signal slot mechanism after entering the value in the lineEdit when i press enter key a circle should be drawn something like this which i have do now when i press F11 it should focus to next circle and if i press F10 it should focus to previous circle.Any help or suggestions


Thanks in advance
Soumya

aamer4yu
19th February 2010, 06:42
I have a feeling that you should have used graphics view framework. It would have been easy with items.
For your current approach, you will need to define a mechanism how to identify the circles and a lot of things.

soumya
19th February 2010, 06:59
Thanks for the reply. I just need to get the focus to the circle.I
can identify the circle form its x and y coordinates and radius.
Any suggestions so that i can do it using qpainter itself.


Regards,
soumya

aamer4yu
19th February 2010, 07:12
What do you mean by get focus to circle ? If you can identify a circle, you can draw it in a particular color to show it has got focus.

soumya
19th February 2010, 07:23
When key is pressed it should get focus
painter.drawEllipse((190 + 100 * xcordinate)- 10,(180 + 100 * ycordinate)- 10,20,20);
i know the xcordinate and ycordinate so it should draw at the particular circumference of big circle but some
connections should be done right like how we done before