QT Widget updaten
Verfasst: 22. August 2012 14:53
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:
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
}