假设我有一个自定义小部件并将其添加到 qt 的主窗口中。
如您所见,红色区域是自定义小部件。我想要做的是当鼠标在红色区域按下并移动时,整个窗口也会移动。
我知道如何简单地实现mousePressEvent
and mouseMoveEvent
; 但是在处理带有自定义小部件的窗口时,我不知道在自定义小部件上按下鼠标时如何移动整个窗口。
另外我想提一下,我只希望鼠标在红色区域按下并移动时窗口可移动,而当鼠标在主窗口区域的其余部分按下并移动时,什么都不会发生。
这是我的CustomWidget
课的样子:
CustomWidget::CustomWidget(QWidget *parent) : QWidget(parent)
{
setFixedSize(50, 50);
setStyleSheet("QWidget { background: red; }");
}
void CustomWidget::paintEvent(QPaintEvent *)
{
QStyleOption opt;
opt.init(this);
QPainter painter(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &painter, this);
}
void CustomWidget::mousePressEvent(QMouseEvent *event)
{
xCoord = event->x();
yCoord = event->y();
}
void CustomWidget::mouseMoveEvent(QMouseEvent *event)
{
move(event->globalX() - xCoord, event->globalY() - yCoord);
}
如果您想知道我为什么要这样做,在我的应用程序中,我隐藏了标题栏并自己绘制了一个自定义标题栏。但是窗口是不可移动的,所以我想让整个窗口在鼠标按下并在标题栏上移动时可以移动。
希望我清楚地解释自己。