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

时间:2013-05-13 14:58:50

标签: qt qwidget

我使用Qt :: Window创建简单的QWidget Qt :: CustomizeWindowHint标志+固定大小(操作系统:Windows 7)。如何禁用顶部边框拖动此窗口?

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

代码:

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

截图:

sample

UPD:请不要提出Qt :: FramelessWindowHint,因为它完成了删除边框。

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

报告为错误:QT-BUG-31144

2 个答案:

答案 0 :(得分:1)

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

http://qt-project.org/doc/qt-4.8/qwidget.html#setDisabled

http://qt-project.org/doc/qt-4.8/qwidget.html#enabled-prop

或者您可以尝试制作无框窗口。

http://qt-project.org/doc/qt-4.8/widgets-windowflags.html

或者继承自己的QFrame,并让它消耗任何鼠标事件。

http://qt-project.org/doc/qt-4.8/qframe.html

http://qt-project.org/doc/qt-4.8/qmouseevent.html

希望有所帮助。

为防止在Windows中专门移动,您可以查看处理:

WM_NCHITTEST

http://msdn.microsoft.com/en-us/magazine/cc301402.aspx

答案 1 :(得分:0)

w.setWindowFlags( Qt::Window | Qt::CustomizeWindowHint | Qt::FramelessWindowHint );可以解决问题。