我在ui中添加了一个verticallayout(600px*600px),
在代码中添加了如下内容,将我自己写的一个widget嵌入了进去
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
w = new RenjuWidget();
QRect r(0,0,600,600);
ui->verticalLayout->setGeometry(r);
ui->verticalLayout->addWidget(w);
this->move(0,0);
}
这个widget继承自qglwidget,其中有以下内容
class RenjuWidget : public QGLWidget
{
Q_OBJECT
public:
RenjuWidget( QWidget * parent = 0 );
~RenjuWidget();
protected:
int posx, posy;
void initializeGL();
void paintGL();
void resizeGL(int width, int height);
void keyPressEvent( QKeyEvent *e );
void mousePressEvent(QMouseEvent *e);
};
我的鼠标响应函数是这个:
void RenjuWidget::mousePressEvent(QMouseEvent *e)
{
if(e->button() == Qt::LeftButton)
{
posx = e->x();
posy = e->y();
cout<<posx<<"\t"<<posy<<endl;
paintGL();
//QMessageBox::information(NULL,QString("%1").arg(posx),QString("%1").arg(posy),QMessageBox::Ok,QMessageBox::NoButton);
return ;
}
}
绘制函数是这个:
void RenjuWidget::paintGL()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
if(posx < 300)
{
glTranslatef( -1.5, 0.0, -10.0 );
glBegin( GL_TRIANGLES );
glColor3f( 1.0, 0.0, 0.0 );
glVertex3f( 0.0, 1.0, 0.0 );
glColor3f( 0.0, 1.0, 0.0 );
glVertex3f( -1.0, -1.0, 0.0 );
glColor3f( 0.0, 0.0, 1.0 );
glVertex3f( 1.0, -1.0, 0.0 );
glEnd();
}
if(posx > 300)
{
glTranslatef( 1.5, 0.0, -10.0 );
glBegin( GL_QUADS );
glColor3f(1.0 , 0.0 , 0.0);
glVertex3f( -1.0, 1.0, 0.0 );
glColor3f(0.0 , 1.0 , 0.0);
glVertex3f( 1.0, 1.0, 0.0 );
glColor3f(0.0 , 0.0 , 1.0);
glVertex3f( 1.0, -1.0, 0.0 );
glColor3f(1.0 , 1.0 , 1.0);
glVertex3f( -1.0, -1.0, 0.0 );
glEnd();
}
glLoadIdentity();
}
也就是说,如果鼠标点击坐标<300,在屏幕左侧显示一个三角形,
如果点击坐标>300,右侧显示一个正方形。
但是,在我点击之后,显示内容不会马上改变,必须要失去焦点一次之后才能改变显示内容……
(比如我点击一下界面左侧,内容不改变,我点击一下桌面,内容才发生改变)
请教各位大神