2013-08-29 42 views
6

Tôi sử dụng QWidget::setFixedSize để tránh cửa sổ của tôi bị thay đổi kích thước. Mặc dù nó hoạt động, con trỏ kiểu thay đổi kích thước vẫn xuất hiện khi đi qua các cạnh.Cách tắt con trỏ thay đổi kích thước

Như ví dụ này: http://bp3.blogger.com/_fhb-4UuRH50/R1ZMKyoIvMI/AAAAAAAAA6s/I08ntfXpp2k/s1600-h/w-resize.gif

Vâng, bạn biết ý tôi là gì. Làm thế nào tôi có thể tránh điều đó?

Tôi sử dụng Windows 7 với trình quản lý cửa sổ mặc định.

+0

Câu hỏi thú vị. Tôi thậm chí không chắc chắn điều này là có thể. Đây không phải là chức năng của trình quản lý cửa sổ?Nó ** có thể ** là Qt không có quyền kiểm soát con trỏ này. Có lẽ bạn nên thêm nhiều thẻ hơn cho câu hỏi của mình. 'windowmanager'? Hệ điều hành nào? Bạn sử dụng trình quản lý cửa sổ nào? Có thể cần một loại chuyên môn khác để giải quyết vấn đề của bạn, bạn nghĩ vậy. – Greenflow

+0

Không chắc chắn - không đặt cờ cửa sổ thành 'Qt :: Dialog | QT :: Window' làm gì? –

+0

Đây có phải là mainwindow của bạn không? Bạn đang sử dụng phiên bản Qt nào? – thuga

Trả lời

2

giải pháp đầu tiên

Bạn có thể thêm lá cờ sau đây để những lá cờ của cửa sổ của bạn để ngăn chặn các cửa sổ không bị thay đổi kích cỡ bởi người sử dụng:

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

Dưới đây là một số chi tiết thông tin về Window Flags.


Thứ hai giải pháp (xấu xí) thí nghiệm

Đây là loại một bẩn công việc xung quanh ... Tôi hoàn toàn nhận thức được thực tế, rằng đây là không sạch sẽ.

Tôi vừa viết cửa sổ chính nhỏ này thay đổi con trỏ theo cách thủ công khi khu vực cửa sổ chính còn lại.

Lưu ý: Bạn phải xem xét các tác dụng phụ. Có thể có một hình dạng con trỏ khác cần thiết cho tiện ích con, nhưng điều này sẽ ghi đè con trỏ cho ứng dụng hoàn chỉnh.

Điều này có thể được sử dụng làm điểm khởi đầu để phát triển hơn nữa và cho các ứng dụng đơn giản.

Tiêu đề:

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

Nếu đây là MainWindow của bạn và bạn đang sử dụng Qt 4, bạn có thể vô hiệu hóa các sizegrip của statusbar của MainWindow của bạn:

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

Nếu không, bạn có thể đặt cờ Qt::MSWindowsFixedSizeDialogHint vào cửa sổ của mình:

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

upvote cho lần đầu tiên, nhưng thứ hai không loại bỏ xử lý thay đổi kích thước từ góc, ít nhất là không trong MSW –

2

Sử dụng

setMinimumSize (QSize (WIDTH_PX, HEIGHT_PX))

setMaximumSize (QSize (WIDTH_PX, HEIGHT_PX))

nơi cả hai phương pháp có cùng size.You sẽ không nhìn thấy con trỏ thay đổi kích thước & cửa sổ do đó không nhận được res ized/tối đa.

+0

Đây là giải pháp đúng – Faas

+0

Không hoạt động trong Qt 5.10. –

Các vấn đề liên quan