[gelöst] Windowsfenster Rahmen entfernen

Alles rund um die Programmierung mit Qt
Antworten
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

[gelöst] Windowsfenster Rahmen entfernen

Beitrag von 24dan »

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?
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)
Igell
Beiträge: 27
Registriert: 11. November 2009 20:36

Beitrag von Igell »

Qt::X11BypassWindowManagerHint, entfernt den Rahmen. Kannst als Argument beim Konstruktor angeben.
Wissen ist die einzige Ressource, die sich vermehrt wenn man sie teilt
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag von 24dan »

Hi vielen Dank habe mir das Beispiel:

WindowFlags angesehen und den Rahmen mit

Code: Alles auswählen

    Qt::WindowFlags flags = 0;
    flags = Qt::CustomizeWindowHint;
    this->setWindowFlags(flags);
weg gezaubert.
Ha.

und jetzt kann ich meine Programm nicht mehr verschieben.

:cry: :cry: :cry:
:cry: :roll: :cry:
:cry: :cry: :cry:

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)
N¤X
Beiträge: 77
Registriert: 21. September 2009 12:24

Beitrag von N¤X »

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.
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag von 24dan »

@N¤X vy-thx_tu-I-tri-&it :wink:
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag von 24dan »

So hier die Lösung:

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;
in den Source von MainWindow
(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();
    }
}
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?

:wink:
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
Antworten