QT Widget updaten

Alles rund um die Programmierung mit Qt
Antworten
Phys1k3r
Beiträge: 4
Registriert: 21. August 2012 15:35

QT Widget updaten

Beitrag von Phys1k3r »

Hallo,

mein Problem. Ich arbeite an einem Programm, dass 3D ausliest und ein 3D-Bild in einem QGLWidget darstellt.
Der Viewer beinhaltet eine Menübar, eine Toolbar und das besagte QGL Widget.

Beim Start meiner Applikation sind die Menübar und die Toolbar ausgeblendet. Man sieht nur einen schwarzen Hintergrund, was bei Kunden den Anschein haben könnte, dass das Programm nicht richtig lädt.
Ich weiß nicht wieso Programmierer des Projektes, dies anfangs so wollte, auf jeden Fall soll ich dies nun ändern. Ziel ist es, dass die Menü/Toolbarleiste dauerhaft angezeigt wird.

Ich habe den Übeltäter in der eventFilter Methode gefunden. Dort wird abgefragt, ob sich der Mauscursor innerhab der Toolbar bzw. des Menüs befindet.
Wenn ja, soll er die enstprechenden Objekte anzeigen, wenn nicht soll er sie ausblenden.

Ich habe dann einfach mal versucht diese Codezeilen auszukommentieren. Es funktioniert auch fast alles so wie ich das wünsche. Es gibt nur ein Problem:
Wenn ich einen neuen 3D-Datensatz lade, wird dieser nicht auf dem widget sofort angezeig. Er ist geladen, da sich der Window-Titel ändert und sobald ich mit dem Maus das 3D-Objekt bewege, aktualsiert sich das Objekt vom alten Objekt zum neuen Objekt.

Durch ausprobieren habe ich rausgefunden, dass das Programm funktioniert, wenn ich menuBar()->hide(); auskommentierte und ui.toolBar->hide(); weiterhin im Code lasse.
Das ist aber nicht genau das, was ich wollte, außerdem finde ich das nicht besonders schön gelöst.

Ist es möglich bzw. welchen Befehl benötige ich, um das Bild direkt nach der Methode Viewer::on_actionImport_triggered() aktualsiert anzeigen zu lassen?
Ich hoffe, es ist klar, worauf ich hinaus will.

Vielen Dank für eure Zeit,
Phys1k3r

Hier die betreffenden Code Zeilen:

Code: Alles auswählen

Viewer::Viewer(QWidget *parent, Qt::WFlags flags)
	: QMainWindow(parent, flags)
{
	ui.setupUi(this);
	this->setCentralWidget(ui.widget);   // set the openGL() screen at maximum size in the GUI
	qApp->installEventFilter(this);	 // install event filter of checking if the mouse moved
...}

Code: Alles auswählen


bool Viewer::eventFilter(QObject *obj, QEvent *event)	// event filter
{
  if (event->type() == QEvent::MouseMove)
  {
	QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
        if(mouseEvent->pos().y() < 50 || menuBar()->underMouse() || ui.toolBar->underMouse())
		{
			if(!this->isFullScreen())
				menuBar()->show();
			ui.toolBar->show(); 
		}
		else
		{
			menuBar()->hide();
			ui.toolBar->hide();		
		}
  }
  return false;
}

Code: Alles auswählen

void Viewer::on_actionImport_triggered()  // open file
{
	/*
Hier wird Filename etc. geöffnet und eingelesen. Fenstertitel geändert etc.
*/
	this->setWindowTitle(tr(title.toUtf8().constData()));
	ui.widget->textureApply  = true;	// set variable true so that color array can be created
	}
N&#164;X
Beiträge: 77
Registriert: 21. September 2009 12:24

Re: QT Widget updaten

Beitrag von N&#164;X »

Das hört sich so an, als würde einfach nur updateGL nicht aufgerufen. Mach das mal direkt nach dem Laden der neuen Szene in on_actionImport_triggered().
mfg N¤X
Antworten