2013-08-29 18 views
6

Używam QWidget::setFixedSize, aby uniknąć zmiany rozmiaru okna. Mimo że działa, kursor zmiany rozmiaru nadal pojawia się podczas przechodzenia przez krawędzie.Jak wyłączyć kursor zmiany rozmiaru

jak to na przykład: http://bp3.blogger.com/_fhb-4UuRH50/R1ZMKyoIvMI/AAAAAAAAA6s/I08ntfXpp2k/s1600-h/w-resize.gif

Wiesz, co mam na myśli. Jak mogę tego uniknąć?

Używam Windows 7 z domyślnym menedżerem okien.

+0

Interesujące pytanie. Nie jestem nawet pewien, czy to możliwe. Czy to nie jest funkcja menedżera okien?To ** mogło ** być, że Qt nie ma kontroli nad tym kursorem. Być może powinieneś dodać więcej tagów do swojego pytania. "Menedżer okien"? Jaki system operacyjny? Jakiego menedżera okien używasz? Może zaistnieć potrzeba innego rodzaju ekspertyzy, aby rozwiązać twój problem, niż myślisz. – Greenflow

+0

Nie jestem pewien - ustawia flagę okna na 'Qt :: Dialog | QT :: Window' zrobić coś? –

+0

Czy to jest dla twojego głównego okna? Którą wersję Qt używasz? – thuga

Odpowiedz

2

pierwsze rozwiązanie

Możesz dodać następującą flagę flagami okna, aby zapobiec okno przed zmieniany przez użytkownika:

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

Oto więcej informacji na temat Window Flags.


Drugie rozwiązanie (brzydki) eksperyment

Jest to swego rodzaju brudnej roboty wokół ... Jestem w pełni świadomy faktu, że to nie jest czysty.

Właśnie napisałem to małe okno główne, które ręcznie zmienia kursor, gdy pozostawi się obszar okna głównego.

Uwaga: Należy wziąć pod uwagę efekty uboczne. Być może istnieje inny kształt kursora potrzebny dla widżetu podrzędnego, ale to przesłoni kursor dla kompletnej aplikacji.

Może to służyć jako punkt wyjścia do dalszego rozwoju i prostych aplikacji.

Header:

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

Jeśli jest to Twoja mainwindow i używasz Qt 4, można wyłączyć sizegrip na pasku stanu Twojego MainWindow za:

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

W przeciwnym razie możesz ustawić flagę Qt::MSWindowsFixedSizeDialogHint w oknie:

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

upvote dla pierwszego, ale drugi nie usuwa uchwytu zmiany rozmiaru z rogu, przynajmniej nie w MSW –

2

Zastosowanie

setMinimumSize (QSize (width_px, HEIGHT_PX))

setMaximumSize (QSize (width_px, HEIGHT_PX))

gdzie obydwa sposoby mają sam rozmiar.Nie zobaczysz kursora zmiany rozmiaru & okno nie dostaje res zmedi/zmaksymalizowany.

+0

To jest poprawne rozwiązanie – Faas

+0

Nie działa w Qt 5.10. –

Powiązane problemy