0

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

截屏:

样本

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

唯一的问题是:为什么拖动只能用于上边框?

报告为错误:QT-BUG-31144

4

2 回答 2

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

于 2013-05-13T17:08:15.523 回答
0

w.setWindowFlags( Qt::Window | Qt::CustomizeWindowHint | Qt::FramelessWindowHint );成功了。

于 2013-05-13T17:18:22.470 回答