Hallo und ein frohes neues,
wie kann ich für mein MainWindow den typischen blauen Fensterrahmen in entweder einen anderen Ändern oder aber ganz weg bekommen so dass mein App rahmenlos läuft?
[gelöst] Windowsfenster Rahmen entfernen
[gelöst] Windowsfenster Rahmen entfernen
Zuletzt geändert von 24dan am 6. Januar 2010 19:50, insgesamt 1-mal geändert.
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
(W. Heisenberg)
Hi vielen Dank habe mir das Beispiel:
WindowFlags angesehen und den Rahmen mit
weg gezaubert.
Ha.
und jetzt kann ich meine Programm nicht mehr verschieben.
Wie bekomme ich mein programm dennoch mit der Mause bewegbar?????
WindowFlags angesehen und den Rahmen mit
Code: Alles auswählen
Qt::WindowFlags flags = 0;
flags = Qt::CustomizeWindowHint;
this->setWindowFlags(flags);
Ha.
und jetzt kann ich meine Programm nicht mehr verschieben.
Wie bekomme ich mein programm dennoch mit der Mause bewegbar?????
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
(W. Heisenberg)
hm, ich glaub setWindowFlags(Qt::FramelessWindowHint) klingt mehr nach dem was du willst. Schau dir zur Not nochmal die Doku an, da kann man alles mögliche angeben (mehrere Flags einfach bitweise Oder verknüpfen).
Das Fenster lässt sich dann aber auch nicht verschieben oder vergrößern/-kleinern, du hast ja schließlich nicht mehr die Elemente über die das eigentlich geschieht (Titelleiste und Rahmen). Das musst du dann halt selber machen. In Qt hab ich das bisher noch nicht gemacht und bin auch grad zu faul die Befehle zu suchen, aber im Prinzip brauchst du folgendes:
Ein Widget mit dem du verschiebst (kann ein Titel-Label sein oder auch dein komplettes Fenster-Widget).
Beim onClick von dem Widget musst du dir die Mausposition und die Fensterposition speichern.
Beim mouseMove Event musst du dann nurnoch
Fensterposition = gespeicherteFensterPosition + (neueMausPosition-gespeicherteMausPosition)
rechnen und gut ist.
Das Fenster lässt sich dann aber auch nicht verschieben oder vergrößern/-kleinern, du hast ja schließlich nicht mehr die Elemente über die das eigentlich geschieht (Titelleiste und Rahmen). Das musst du dann halt selber machen. In Qt hab ich das bisher noch nicht gemacht und bin auch grad zu faul die Befehle zu suchen, aber im Prinzip brauchst du folgendes:
Ein Widget mit dem du verschiebst (kann ein Titel-Label sein oder auch dein komplettes Fenster-Widget).
Beim onClick von dem Widget musst du dir die Mausposition und die Fensterposition speichern.
Beim mouseMove Event musst du dann nurnoch
Fensterposition = gespeicherteFensterPosition + (neueMausPosition-gespeicherteMausPosition)
rechnen und gut ist.
So hier die Lösung:
in die header der MainWindow:
in den Source von MainWindow
(Das... Achtung in den Konstruktor!!!):
und die beiden Mouse Move &b Press implementieren
in MainWindow
Einzes Problem....
Mit meinen DockWidget ist es jetzt mitmal merkwürdig anders ...
Ich docke die aus und mein MainWindow hüpft dann etwas von der letzten Position weg und ich habe Probleme mein DockWidget wieder so mal eben einzufügen, weil das MainWindow zum Teil den sichbaren Bereich des Bildschirms verlassen hat....
Dumm. Hat da jemand einen Plan?

in die header der MainWindow:
Code: Alles auswählen
stuff..
protected:
void mouseMoveEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
private:
//! Fuer die Bewegung des Fensters
QPoint m_dragPosition;
(Das... Achtung in den Konstruktor!!!):
Code: Alles auswählen
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
Qt::WindowFlags flags = 0;
flags = Qt::CustomizeWindowHint; //Qt::FramelessWindowHint;
this->setWindowFlags(flags);
stuff...
und die beiden Mouse Move &b Press implementieren
in MainWindow
Code: Alles auswählen
/*! MouseMove fuer das Bewegen des Fensters
\param event QMouseEvent Mouse Event
*/
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons() & Qt::LeftButton) {
move(event->globalPos() - m_dragPosition);
event->accept();
}
}
/*! MousePressed fuer das Bewegen des Fensters
\param event QMouseEvent Mouse Event
*/
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
m_dragPosition = event->globalPos() - frameGeometry().topLeft();
event->accept();
}
}
Mit meinen DockWidget ist es jetzt mitmal merkwürdig anders ...
Ich docke die aus und mein MainWindow hüpft dann etwas von der letzten Position weg und ich habe Probleme mein DockWidget wieder so mal eben einzufügen, weil das MainWindow zum Teil den sichbaren Bereich des Bildschirms verlassen hat....
Dumm. Hat da jemand einen Plan?
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
(W. Heisenberg)