如何禁用调整大小光标

6

有趣的问题。我甚至不确定这是否可能。这不是窗口管理器的功能吗?Qt 可能无法控制此光标。也许您应该为您的问题添加更多标签。'windowmanager'?什么操作系统?您使用什么窗口管理器?可能需要另一种专业知识来解决您的问题。 - Greenflow
不确定 - 将窗口标志设置为 Qt::Dialog | QT::Window 会有什么作用吗? - NG.
这是用于你的mainwindow吗?你使用的Qt版本是哪个? - thuga
3个回答

11

如果这是你的主窗口,并且你正在使用Qt 4,则可以禁用主窗口状态栏的sizegrip:

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

否则,您可以在窗口中设置Qt :: MSWindowsFixedSizeDialogHint标志:

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

点赞第一个,但第二个没有从角落中移除调整大小的手柄,至少在MSW中不是。 - Scaramouche

2

第一解决方案

您可以在窗口标志中添加以下标志,以防止用户调整窗口大小:

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

这里是有关窗口标志的更多信息。


第二个(丑陋的)实验解决方案

这是一种肮脏的解决方法......我完全意识到这不是干净的。

我刚写了这个小主窗口,在主窗口区域离开时手动更改光标。

注意:您必须考虑副作用。也许子窗口需要另一个光标形状,但这会覆盖整个应用程序的光标。

这可以用作进一步开发和简单应用程序的起点。

头文件:

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

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

C++:

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);
}

2

使用setMinimumSize(QSize(宽度_像素,高度_像素))setMaximumSize(QSize(宽度_像素,高度_像素))方法,两个方法需要设置相同的大小。这样做后,您将看不到调整大小的光标,窗口也不会被调整大小或最大化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接