2013-08-29 14 views
6

Io uso QWidget::setFixedSize per evitare il ridimensionamento della finestra. Anche se funziona, il cursore di ridimensionamento appare ancora quando passa sopra i bordi.Come disabilitare il cursore di ridimensionamento

Ti piace questa ad esempio: http://bp3.blogger.com/_fhb-4UuRH50/R1ZMKyoIvMI/AAAAAAAAA6s/I08ntfXpp2k/s1600-h/w-resize.gif

beh, sai cosa voglio dire. Come posso evitarlo?

Io uso Windows 7 con il gestore finestre predefinito.

+0

Interessante domanda. Non sono nemmeno sicuro che sia possibile. Non è una funzione del window manager?** Potrebbe ** essere che Qt non ha il controllo su questo cursore. Forse dovresti aggiungere più tag alla tua domanda. 'Windowmanager'? Quale sistema operativo? Quale gestore di finestre usi? Potrebbe avere bisogno di un altro tipo di esperienza per risolvere il tuo problema, allora pensi. – Greenflow

+0

Non sicuro - imposta il flag della finestra su 'Qt :: Dialog | QT :: Window' fa qualcosa? –

+0

È per la tua finestra principale? Quale versione di Qt stai usando? – thuga

risposta

2

Prima soluzione

È possibile aggiungere il seguente bandiera alle bandiere della finestra per evitare che la finestra venga ridimensionata da parte dell'utente:

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

Ecco qualche informazione in più Window Flags.


Seconda soluzione (brutto) esperimento

Questa è una specie di sporco lavoro-around ... Sono pienamente consapevole del fatto che questo non è pulito.

Ho appena scritto questa piccola finestra principale che cambia il cursore manualmente quando l'area della finestra principale viene lasciata.

Nota: è necessario considerare gli effetti indesiderati. Forse c'è un'altra forma del cursore necessaria per un widget figlio, ma questo sovrascrive il cursore per l'applicazione completa.

Questo può essere utilizzato come punto di partenza per ulteriori sviluppi e per applicazioni semplici.

Intestazione:

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

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

cpp:

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

Se questa è la tua MainWindow e si sta utilizzando Qt 4, è possibile disattivare la sizegrip della barra di stato del vostro MainWindow:

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

Altrimenti puoi impostare la bandiera Qt::MSWindowsFixedSizeDialogHint alla tua finestra:

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

upvote per il primo, ma il secondo non rimuove l'handle di ridimensionamento dall'angolo, almeno non in MSW –

2

Uso

setMinimumSize (qsize (width_px, height_px))

setMaximumSize (qsize (width_px, height_px))

dove entrambi i metodi hanno stesso size.Non vedrai il cursore di ridimensionamento & la finestra non ottiene quindi ized/massimizzato.

+0

Questa è la soluzione corretta – Faas

+0

Non funziona in Qt 5.10. –

Problemi correlati