setToolTip("关闭"); QPushButton* maximizeButton =...-Go服务器开发" />

ZBLOG

CustomTitleBar::CustomTitleBar(QWidget *parent) : QWidget(parent) { setStyleSheet("background-color: rgb(221, 222, 226);"); QPushButton* closeButton = new QPushButton(); closeButton->setToolTip("关闭"); QPushButton* maximizeButton =...

要使得CustomTitleBar类能够在窗口最上方拖动整个窗口,你需要重写鼠标事件,以便在用户按下鼠标并移动时,可以更新窗口的位置。下面是修改后的代码示例,添加了鼠标事件来实现拖动功能:

#include <QMouseEvent>

class CustomTitleBar : public QWidget {
    Q_OBJECT

public:
    explicit CustomTitleBar(QWidget *parent = nullptr);

protected:
    void mousePressEvent(QMouseEvent *event) override;
    void mouseMoveEvent(QMouseEvent *event) override;

private:
    bool dragging;
    QPoint dragPosition;
};

CustomTitleBar::CustomTitleBar(QWidget *parent) 
    : QWidget(parent), dragging(false) {
    setStyleSheet("background-color: rgb(221, 222, 226);");

    // ... (其他初始化代码)

}

void CustomTitleBar::mousePressEvent(QMouseEvent *event) {
    if (event->button() == Qt::LeftButton) {
        dragging = true;
        dragPosition = event->globalPos() - parentWidget()->frameGeometry().topLeft();
        event->accept();
    }
}

void CustomTitleBar::mouseMoveEvent(QMouseEvent *event) {
    if (dragging && (event->buttons() & Qt::LeftButton)) {
        move(event->globalPos() - dragPosition);
        event->accept();
    }
}

void CustomTitleBar::mouseReleaseEvent(QMouseEvent *event) {
    if (event->button() == Qt::LeftButton) {
        dragging = false;
        event->accept();
    }
}

解释:

  1. 成员变量:我们增加了一个bool dragging和一个QPoint dragPosition变量来跟踪是否正在拖动窗口以及鼠标的相对位置。

  2. 重写的事件处理函数

    • mousePressEvent: 当鼠标左键按下时,设置为拖动状态,并记录当前位置。
    • mouseMoveEvent: 如果正在拖动,计算新的位置并移动窗口。
    • mouseReleaseEvent: 当松开鼠标左键时,停止拖动。
  3. 父窗口移位:通过使用move()方法,将新计算的位置应用到父窗口(通常是主窗口)。

确保在构造函数中完成所有必要的按钮和布局初始化,然后将这些事件处理程序添加到你的自定义标题栏类中。这会允许你点击标题栏并拖动整个窗体。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:setToolTip("关闭"); QPushButton* maximizeButton =...">https://golang.0voice.com/?id=22257

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?