Seite 1 von 1

[gelöst] Windowsfenster Rahmen entfernen

Verfasst: 1. Januar 2010 01:05
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?

Verfasst: 1. Januar 2010 11:39
von Igell
Qt::X11BypassWindowManagerHint, entfernt den Rahmen. Kannst als Argument beim Konstruktor angeben.

Verfasst: 2. Januar 2010 18:21
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?????

Verfasst: 2. Januar 2010 19:03
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.

Verfasst: 2. Januar 2010 23:43
von 24dan
@N¤X vy-thx_tu-I-tri-&it :wink:

Verfasst: 6. Januar 2010 19:48
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: