gpt4 book ai didi

c++ - 如何在 Qt 中使用自定义 titleBar move 窗口

转载 作者:搜寻专家 更新时间:2023-10-31 02:09:44 26 4
gpt4 key购买 nike

我是 Qt 的初学者,我想使用我自己的自定义 titleBar(QLabel) 来拖动和 move 窗口。

Qt代码:

void MainWindow::mousePressEvent(QMouseEvent *event)
{
mpos = event->pos();
}

void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons() & Qt::LeftButton)
{
QPoint diff = event->pos() - mpos;
QPoint newpos = this->pos() + diff;
this->move(newpos);
}
}

此代码允许我通过在任何 QWidget 上按下鼠标来 move 窗口,但我想通过在 QLabel 上按下鼠标来 move 窗口。

最佳答案

我知道有点晚了,但我解决了这个问题。代码与 Farhad 建议的实现非常相似,但是要解决“跳转”窗口,您还需要在事件过滤器中更新鼠标的当前位置:

 if (object == ui->frame_title && event->type() == QEvent::MouseButtonPress)
{
QMouseEvent* mouseEvent = (QMouseEvent*)event;
if (pressed == false){
current = mouseEvent->pos();
}
pressed = true;
return true;
}

添加这个,当用户第一次按下左键时,你会得到当前的鼠标位置。

这里是完整的实现:

void MainWindow::mousePressEvent(QMouseEvent *event)
{
current = event->pos();
}

void MainWindow::mouseMoveEvent(QMouseEvent *event)
{

if(pressed)
this->move(mapToParent(event->pos() - current));
}

bool MainWindow::eventFilter(QObject *object, QEvent *event)
{
if (object == ui->frame_title && event->type() == QEvent::MouseButtonPress)
{
QMouseEvent* mouseEvent = (QMouseEvent*)event;
if (pressed == false){
current = mouseEvent->pos();
}
pressed = true;
return true;
}
if (object == ui->frame_title && event->type() == QEvent::MouseButtonRelease)
{
pressed = false;
return true;
}
else
return false;
}

然后在您的构造函数中,只需添加(frame_title 是我的标题栏):

ui->frame_title->installEventFilter(this);

关于c++ - 如何在 Qt 中使用自定义 titleBar move 窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46256234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com