如何使用Qt::CustomizeWidget禁用QWidget的拖动?

如何使用Qt::CustomizeWidget禁用QWidget的拖动?,qt,qwidget,Qt,Qwidget,我使用Qt::Window | Qt::CustomizeWindowint标志+固定大小(OS:Windows7)创建简单的QWidget。如何禁用通过上边框拖动此窗口 创建的窗口没有标题栏-所以它不应该被鼠标拖动。它是Qt(4.8.4)中的bug吗 代码: #包括 #包括 int main(int argc,char*argv[]) { 质量保证申请a(argc、argv); qw; w、 setWindowFlags(Qt::Window | Qt::CustomizeWindowint)

我使用Qt::Window | Qt::CustomizeWindowint标志+固定大小(OS:Windows7)创建简单的QWidget。如何禁用通过上边框拖动此窗口

创建的窗口没有标题栏-所以它不应该被鼠标拖动。它是Qt(4.8.4)中的bug吗

代码:

#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
qw;
w、 setWindowFlags(Qt::Window | Qt::CustomizeWindowint);
w、 设置固定大小(300200);
w、 show();
返回a.exec();
}
截图:

UPD:请不要建议Qt::FramelessWindowHint,因为它完全删除了边框

唯一的问题是:为什么拖动仅适用于上边框


报告为错误:

您可以将整个小部件设置为禁用

或者你可以试着做一个无框窗口

或者将您自己的
QFrame
子类化,并让它使用其上的任何鼠标事件

希望有帮助

要防止在windows中移动,您可以查看处理:

WM_NCHITTEST


w.setWindowFlags(Qt::Window | Qt::CustomizeWindowint | Qt::FramelessWindowHint)起作用。

谢谢,但这是解决办法。我想在QWidget周围保留本机框架。我可以实现仅限windows的解决方案,但我不想包含特定于平台的代码。我不一定要说变通方法。如果您认为让上边缘调整位置而不是大小是一个错误,您可以在报告。大多数情况下,如果一个小部件的行为与您想要的不匹配,您只需将您想要更改的子类化即可。它只适用于具有固定大小的小部件。不,它不是。它完全消除了边界。
#include <QtGui/QApplication>
#include <QWidget>

int main( int argc, char *argv[] )
{
    QApplication a(argc, argv);
    QWidget w;
    w.setWindowFlags( Qt::Window | Qt::CustomizeWindowHint );
    w.setFixedSize( 300, 200 );
    w.show();
    return a.exec();
}