2013-08-29 24 views
6

Ich verwende QWidget::setFixedSize, um zu vermeiden, dass mein Fenster in der Größe geändert wird. Obwohl es funktioniert, wird der Größenänderungszeiger immer noch angezeigt, wenn Sie über die Kanten fahren.So deaktivieren Sie den Größenänderungscursor

wie dies zum Beispiel: http://bp3.blogger.com/_fhb-4UuRH50/R1ZMKyoIvMI/AAAAAAAAA6s/I08ntfXpp2k/s1600-h/w-resize.gif

Nun, wissen Sie, was ich meine. Wie kann ich das vermeiden?

Ich verwende Windows 7 mit dem Standard-Windows-Manager.

+0

Interessante Frage. Ich bin mir nicht einmal sicher, ob das möglich ist. Ist das nicht eine Funktion des Fenstermanagers?Es könnte ** sein, dass Qt keine Kontrolle über diesen Cursor hat. Vielleicht sollten Sie Ihrer Frage weitere Tags hinzufügen. 'Fenstermanager'? Welches OS? Welchen Fenstermanager benutzen Sie? Vielleicht brauchen Sie eine andere Art von Know-how, um Ihr Problem zu lösen, dann denken Sie. – Greenflow

+0

Nicht sicher - setzt das Fensterflag auf 'Qt :: Dialog | QT :: Window' irgendetwas tun? –

+0

Ist dies für Ihr Hauptfenster? Welche Qt-Version verwendest du? – thuga

Antwort

2

Erste Lösung

Sie können die folgende Flag an die Flaggen von Ihrem Fenster fügen Sie das Fenster zu verhindern, dass durch den Benutzer der Größe verändert werden:

setWindowFlags(this->windowFlags() |= Qt::FramelessWindowHint); 

Hier sind einige weitere Informationen über Window Flags.


Sekunde (hässlich) Experiment Lösung

Dies ist eine Art von einem schmutzigen Work-around ... Ich bin völlig der Tatsache bewusst, dass dies nicht sauber ist.

Ich habe dieses kleine Hauptfenster geschrieben, das den Cursor manuell ändert, wenn der Hauptfensterbereich verlassen wird.

Hinweis: Sie müssen Nebenwirkungen berücksichtigen. Möglicherweise ist für ein untergeordnetes Widget eine andere Cursorform erforderlich, die jedoch den Cursor für die vollständige Anwendung außer Kraft setzt.

Dies kann als Ausgangspunkt für die weitere Entwicklung und für einfache Anwendungen verwendet werden.

Rubrik:

class CMainWindow : 
    public QMainWindow 
{ 
public: 
    CMainWindow(QWidget* parent = nullptr); 
    virtual ~CMainWindow(void); 

protected: 
    virtual void leaveEvent(QEvent *event); 
    virtual void enterEvent(QEvent *event); 
}; 

cav:

CMainWindow::CMainWindow(QWidget* parent) : QMainWindow(parent) 
{ 
    setMouseTracking(true); 
} 

CMainWindow::~CMainWindow(void) 
{ 
} 

void CMainWindow::leaveEvent(QEvent *event) 
{ 
    qApp->setOverrideCursor(QCursor(Qt::ArrowCursor)); 
    QMainWindow::leaveEvent(event); 
} 

void CMainWindow::enterEvent(QEvent *event) 
{ 
    qApp->restoreOverrideCursor(); 
    QMainWindow::enterEvent(event); 
} 
6

Wenn dies Ihr Hauptfenster und Sie verwenden Qt 4, können Sie die Sizegrip Ihrer Hauptfenster des statusbar deaktivieren:

this->statusBar()->setSizeGripEnabled(false); 

Ansonsten können Sie die Qt::MSWindowsFixedSizeDialogHint Flagge auf Ihr Fenster setzen:

this->setWindowFlags(this->windowFlags() | Qt::MSWindowsFixedSizeDialogHint); 
+0

upvote für die erste, aber die zweite entfernt nicht die Größenanpassung Griff aus der Ecke, zumindest nicht in MSW –

2

Verwenden

setMinimumSize (Qsize (width_px, height_px))

setMaximumSize (Qsize (width_px, height_px))

wo beide Methoden gleichen haben size.Sie sehen den Größenänderungscursor nicht & das Fenster erhält so res nicht maximiert/maximiert.

+0

Dies ist die richtige Lösung – Faas

+0

Funktioniert nicht in Qt 5.10. –