如何在QT中实现自己的标题栏

 我来答
匿名用户
2015-03-24
展开全部
有时候我们觉得QMainWindow的标题栏不太适合我们的程序要求,而想设计自己的标题栏。这时在构造QMainWindow的时候我们可以设置标记为Qt::FramelessWindowHint,这时我们将得到一个无标题栏的窗口。但是问题也随之而来:我们无法移动这个窗口(有标题栏的时候我们可以通过点击标题栏实现窗口的拖曳)。这时我们可以通过重载QMainWindow的两个成员函数实现窗口的拖动功能:
last 和 pos0分别为MainWindow的成员变量
void MainWindow::mouseMoveEvent(QMouseEvent *e)
{
QPoint temp = e->pos();
const int pos_min_x = ui->titleWidget->pos().x();
const int pos_max_x = pos_min_x + ui->titleWidget->width();
const int pos_min_y = ui->titleWidget->pos().y();
const int pos_max_y = pos_min_y + ui->titleWidget->height();
if ( temp.x()>pos_min_x && temp.x()<pos_max_x && temp.y()>pos_min_y && temp.y()<pos_max_y )
{
//只对标题栏范围内的鼠标事件进行处理
QPoint newpos = e->globalPos();
QPoint upleft = pos0 + newpos - last;
move(upleft);
}
}
void MainWindow::mousePressEvent(QMouseEvent *e)
{
QPoint temp = e->pos();
const int pos_min_x = ui->titleWidget->pos().x();
const int pos_max_x = pos_min_x + ui->titleWidget->width();
const int pos_min_y = ui->titleWidget->pos().y();
const int pos_max_y = pos_min_y + ui->titleWidget->height();
if ( temp.x()>pos_min_x && temp.x()<pos_max_x && temp.y()>pos_min_y && temp.y()<pos_max_y )
{
//只对标题栏范围内的鼠标事件进行处理。
last = e->globalPos();
pos0 = e->globalPos() - e->pos();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式