I'm trying to access the ui member which is private in the MainWindow class.
I would like to update a lineEdit (Xvaldisp) when I release the mousebutton (with the amount the mouse moved)from a gl widget.
After searching a bit around I found that I need to create a function/Method in mainwindow then access it through a pointer to Mainwindow from my GLWidget
The problem:
The lineEdit remains blank, The method( displaymessage() ) that should update it seems to get called.
To check that I've created a string(str) to see if displaymessage was getting called, this string gets updated with a new value when displaymessage() gets called.
The on_Button_clicked() method below displaymessage() also updates the same lineEdit when a pushbutton is clicked and works just fine it displays the content of str
Here's my code:
glwidget.h
#ifndef GLWIDGET_H
#define GLWIDGET_H
#include <QGLWidget>
#include <QTimer>
#include <QMouseEvent>
#include "mainwindow.h"
#include <QObject>
#include <QLineEdit>
class GLWidget : public QGLWidget
{
Q_OBJECT
public:
explicit GLWidget(QWidget *parent = 0);
void mousePressEvent(QMouseEvent *e);
void mouseReleaseEvent(QMouseEvent *e);
void initializeGL();
void paintGL();
void resizeGL(int w, int h);
private:
QTimer timer;
QPoint pointMpressed;
QPoint diff;
protected:
signals:
void valueCh();
};
#endif // GLWIDGET_H
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLineEdit>
#include <QObject>
#include "glwidget.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void on_Button_clicked();
void displayMessage();
protected:
void changeEvent(QEvent *e);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
glwidget.cpp.
#include "glwidget.h"
#include <GL/glut.h>
GLWidget::GLWidget(QWidget *parent) :
QGLWidget(parent)
{
connect (&timer,SIGNAL(timeout()),this,SLOT(updateGL()));
timer.start(16);
}
void GLWidget::mousePressEvent(QMouseEvent *e){
pointMpressed=e->pos();
}
void GLWidget::mouseReleaseEvent(QMouseEvent *e){
diff=(e->pos())- pointMpressed ; //calculate position difference between click and release
MainWindow *mwd;
mwd= new MainWindow;
// mwd->displayMessage(); //tried this first then with signals and slots below same result
QObject::connect(this, SIGNAL(valueCh()), mwd ,SLOT(displayMessage()) );
emit valueCh();
delete mwd;
}
void GLWidget::initializeGL(){
}
void GLWidget::resizeGL(int w, int h){
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "glwidget.h"
QString str="none activated"; //I used this string to check if the methods were getting called
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
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::displayMessage(){ //this method should update the lineEdit (Xvaldisp) the lineEdit however remains blank but str gets updated
ui->Xvaldisp->setText(str);
str ="displayMessage hs rn"; //displaymessage has run
}
void MainWindow::on_Button_clicked(){ // this is a pushbutton(Button) that once pushed also updates the same lineEdit(Xvaldisp) this works just fine If I clicked and released the mouse before on the GLWidget it would show the by displaymessage() updated string else it would be the orginal value
ui->Xvaldisp->setText(str);
}