qt自定义标题栏

1)创建一个标题的界面类,重新实现鼠标移动点击等事件

2)设置主界面无边框,创建一个垂直布局管理器,插入标题界面,在标题界面和主界面之间添加一个分割器

setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);

QtGuiDetailTitle *title = new QtGuiDetailTitle(this);

ui.verticalLayout->setContentsMargins(8, 8, 8, 8);//设置上下左右边距

ui.verticalLayout->insertWidget(0, title);

ui.verticalLayout->insertStretch(1);//插入一个分割器

3)重新实现主界面的nativeEvent时间,使界面可伸缩

#include <Windows.h>
#include <WindowsX.h>
bool QtGuiDirectDetail::nativeEvent(const QByteArray &eventType, void *message, long *result){
  MSG* msg = (MSG*)message;
  switch (msg->message){
  case WM_NCHITTEST:
    int xPos = GET_X_LPARAM(msg->lParam) - this->frameGeometry().x();
    int yPos = GET_Y_LPARAM(msg->lParam) - this->frameGeometry().y();
    if (this->childAt(xPos, yPos) == 0){
      *result = HTCAPTION;
    }
    else{
      return false;
    }
    if (xPos > 0 && xPos < 8){
      *result = HTLEFT;
    }
    if (xPos >(this->width() - 8) && xPos < (this->width() - 0)){
      *result = HTRIGHT;
    }
    if (yPos > 0 && yPos < 8){
      *result = HTTOP;
    }
    if (yPos >(this->height() - 8) && yPos < (this->height() - 0)){
      *result = HTBOTTOM;
    }
    if (xPos > 18 && xPos < 22 && yPos > 18 && yPos < 22){
      *result = HTTOPLEFT;
    }
    if (xPos >(width() - 22) && xPos < (width() - 18) && yPos > 18 && yPos < 22){
      *result = HTTOPRIGHT;
    }
    if (xPos > 18 && xPos < 22 && yPos >(height() - 22) && yPos < (height() - 18)){
      *result = HTBOTTOMLEFT;
    }
    if (xPos >(width() - 22) && xPos < (width() - 18) && yPos >(height() - 22) && yPos < (height() - 18)){
      *result = HTBOTTOMRIGHT;
    }
    return true;
  }
  return false;
}

  已经工作的程序员朋友可以关注下我的gzh“程序员成长日志”,分享日常工作中解决的问题即可赚取稿费,大家一起成长~

原文地址:https://www.cnblogs.com/czrz1024/p/12639184.html

时间: 2024-10-08 02:15:50

qt自定义标题栏的相关文章

Qt 自定义标题栏

1 头文件 #ifndef TITLEBAR_H #define TITLEBAR_H #include <QLabel> #include <QPushButton> #include "ui_TitleBar.h" class TitleBar : public QWidget { Q_OBJECT public: explicit TitleBar(QWidget *parent = nullptr); ~TitleBar(); void setMiniB

paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制

源地址:http://blog.csdn.net/attilax/article/details/12343625 paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制 效果图: 作者Attilax ,  EMAIL:[email protected] 来源:attilax的专栏地址:http://blog.csdn.net/attilax 第一步:去掉系统默认标题栏 1 第2步:添加自定义标题栏以及最小化,最大化.关闭按钮...还有左边的窗体小图标.. 2 第3步:添加标

QT自定义精美换肤界面

陆陆续续用QT开发过很多项目,也用QT写过不少私活项目,也写过N个工具,一直梦寐以求能像VC一样可以很方便的有个自定义的界面,QSS的强大让我看到了很好的希望,辗转百度谷歌无数次,一直搜索QT相关的换肤文章,绝大部分的是一些简单的按钮文本样式,要做到整体换肤程度几乎不行,QTCN论坛里的奋斗的孩子写了个模仿360安全卫士系列,让我既惊喜有遗憾,惊喜的是能够用QT实现一个这么完整的360安全卫士界面,确实不错,也支持多种换肤,遗憾的是我下载过的是VC版本的,对于一直执着于用Qt Creator 来

android 自定义标题栏

今天来看一下如何通过组合多个控件实现自定义标题栏 众所周知,标题栏是应用中必不可少的控件,为了避免多次重写,将其封装起来,供每个布局调用即可. 这里我们采用经典的左中右布局,也可以根据项目需要自行调整,比如在右侧再加一个控件,或者将标题偏左都可以 注:其中应用到了上一篇文章中的ButtonM控件,大家可以先简单了解一下. 还是先来看一下效果图:    图一 初始状态                                         图二 按下了右侧的搜索按钮 下面来看代码实现,共四

WPF 自定义标题栏

自定义标题栏效果如上,代码示例 <Grid> <Grid.Resources> <Style TargetType="RadioButton"> <Setter Property="Margin" Value="0.5,2"></Setter> <Setter Property="Template"> <Setter.Value> <Co

【Win 10开发】自定义标题栏

UWP 现在已经可以自定义标题栏了,毕竟看灰色时间长了也会厌烦,开发者们还是希望能够将自己的UI做的更加漂亮,更加与众不同.那么废话不多说,我们开始吧! 首先要了解ApplicationViewTitleBar这个类.其中提供了以下属性: MSDN参考地址:ApplicationViewTitleBar class 首先,我们写一个TitleBarChanged方法,在里面先获取到当前窗口的实例. 1 ApplicationView view = ApplicationView.GetForCu

Qt自定义菜单项

经常会看到一些菜单的部分项是由几个按钮组成的,如酷狗.QQ.360都有类似菜单,对于常规的菜单项,图标 + 文字 实现一个事件,很容易完成,那么怎么自定义菜单项呢? Qt提供了支持,就是利用QWidget + QWidgetAction来完成.QWidgetAction继承自QAction,无法通过继承来实现一个界面,但它提供了setDefaultWidget来绑定一个界面,使用起来就更加方便了. 下面实现一个没有Action的菜单,并通过按钮显示出来: void UserMenu::Creat

安卓学习随笔 -- 自定义标题栏

在安卓中不喜欢系统默认的标题栏,那么如何让自定义一个自己的标题栏呢. 自定义后的标题栏如下: 首先这里需要定义一个自定义的标题栏布局 title.xml文件 (里边需要两个图片这个很简单) <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fi

android自定义标题栏,背景颜色填充满

设置标题栏背景 1> 准备背景图片: background_pix.png 注:用背景图片比用颜色好处,可以让背景看起来有凹凸感. 2> drawable文件夹下放xml文件 bitmap_repeat.xml <?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android"