首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想在qt中创建一个自定义标题栏。

我想在qt中创建一个自定义标题栏。
EN

Stack Overflow用户
提问于 2017-04-10 09:22:14
回答 1查看 7.5K关注 0票数 0

我想在qt中创建一个自定义标题栏。

所以我查了几个例子,然后跟着它们走。下面是应用该示例的代码。

Widget头文件:

代码语言:javascript
复制
#include <QWidget>
#include <QMouseEvent>

class KcWdTitlebar :public QWidget
{
private:
    QWidget *m_parent;
    QPoint m_pCursor;

public:
    KcWdTitlebar( QWidget *parent) ;

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

Widget :

代码语言:javascript
复制
KcWdTitlebar::KcWdTitlebar(QWidget *parent ) :m_parent(parent)
{
    QLabel *title = new QLabel(parent->windowTitle());
    QPushButton *pPB = new QPushButton ("x");

    QHBoxLayout *layout = new QHBoxLayout(this);
    layout->addWidget(title);
    layout->addWidget(pPB);

    connect(pPB,SIGNAL(clicked()),parent,SLOT(close()));
}

void KcWdTitlebar::mousePressEvent(QMouseEvent *event)
{
    if(event->button() == Qt::LeftButton)
    {
        m_pCursor = event->globalPos() - geometry().topLeft();
        event->accept();
    }
}

void KcWdTitlebar::mouseMoveEvent(QMouseEvent *event)
{
    if(event->buttons() & Qt::LeftButton)
    {
        m_parent->move(event->globalPos() - m_pCursor);
        event->accept();
    }
}

主窗口头:

代码语言:javascript
复制
#include <QMainWindow>
#include "KcWdTitlebar.h"

namespace Ui {
class mainwindow;
}

class mainwindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit mainwindow(QWidget *parent = 0);
    ~mainwindow();

private:
    KcWdTitlebar *m_title;
    Ui::mainwindow *ui;
};

主寡妇cpp :

代码语言:javascript
复制
mainwindow::mainwindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::mainwindow)
{
    ui->setupUi(this);
    m_title = new KcWdTitlebar(this);
    ui->verticalLayout->addWidget(m_title);

}

当我运行这段代码时,单击并拖动KcWdTitle部分将导致主窗口比我单击的点更远。

我应该修复代码的哪些部分?

我希望每个人都能听懂我的英语。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-11 16:45:34

您需要更改mousePressEvent()以减去MainWindow几何,而不是标题栏的几何图形。

更改:

代码语言:javascript
复制
m_pCursor = event->globalPos() - geometry().topLeft();

对此:

代码语言:javascript
复制
m_pCursor = event->globalPos() - m_parent->geometry().topLeft();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43319368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档