假设我有一个自定义小部件并将其添加到Qt的主窗口中。
如您所见,红色区域是自定义小部件。我想做的是当鼠标按在红色区域并移动时,整个窗口也会移动。
我知道如何简单地实现
另外,我想提一下,我只希望在鼠标按在红色区域并移动时窗口可移动,在主窗口区域的其余部分按下并移动鼠标时什么也不会发生。
这是我的
如果你想知道我为什么想要这样做,在我的应用程序中,我隐藏了标题栏,并自己绘制了一个自定义标题栏。但窗口无法移动,所以我希望当鼠标在标题栏上按下并移动时,整个窗口可以移动。
希望我表达清楚了。
我知道如何简单地实现
mousePressEvent
和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);
}
如果你想知道我为什么想要这样做,在我的应用程序中,我隐藏了标题栏,并自己绘制了一个自定义标题栏。但窗口无法移动,所以我希望当鼠标在标题栏上按下并移动时,整个窗口可以移动。
希望我表达清楚了。
paintEvent
。小部件默认绘制它们的背景。在调用paintEvent
时,背景已经被绘制了,而且是红色的 :) 你还应该声明事件处理程序为override
,因为你正在使用C++11编写。 - Kuba hasn't forgotten Monica