DtkWidget
DTK Widget module
载入中...
搜索中...
未找到
Dtk::Widget::DTitlebar类 参考

Dtitlebar是Dtk程序通用的标题栏组件,用于实现标题栏的高度定制化 更多...

类 Dtk::Widget::DTitlebar 继承关系图:

Public 槽

void setFixedHeight (int h)
 设置标题栏的高度,默认高度为 50。
 
void setBackgroundTransparent (bool transparent)
 设置标题栏背景是否透明,当为透明时标题栏直接叠加在下层控件上.
 
void setSeparatorVisible (bool visible)
 设置菜单下面的分隔线是否可见,默认是可见的
 
void setTitle (const QString &title)
 设置标题栏文本。
 
void setIcon (const QIcon &icon)
 设置标题栏图标
 
void toggleWindowState ()
 Maximized/Minumized
 
void setBlurBackground (bool blurBackground)
 

信号

void optionClicked ()
 
void doubleClicked ()
 
void mousePressed (Qt::MouseButtons buttons)
 
void mouseMoving (Qt::MouseButton button)
 

Public 成员函数

 DTitlebar (QWidget *parent=Q_NULLPTR)
 构造函数,创建一个DTitlebar对象,包含默认的窗口按钮.
 
QMenu * menu () const
 获取和标题栏关联的应用查询菜单
 
void setMenu (QMenu *menu)
 设置自定义的程序菜单
 
QWidget * customWidget () const
 标题栏绑定的自定义控件,可以通过自定义控件来在标题栏上显示复杂的组合控件
 
void setCustomWidget (QWidget *, bool fixCenterPos=false)
 
void setSidebarHelper (DSidebarHelper *helper)
 
void addWidget (QWidget *w, Qt::Alignment alignment=Qt::Alignment())
 
void removeWidget (QWidget *w)
 
int buttonAreaWidth () const
 按钮区域大小,用于手动定位自定义控件时使用
 
bool separatorVisible () const
 分隔线是否可见
 
bool autoHideOnFullscreen () const
 全屏模式下标题栏是否自动隐藏
 
void setAutoHideOnFullscreen (bool autohide)
 设置全屏模式下是否需要自动隐藏标题栏
 
virtual void setVisible (bool visible) Q_DECL_OVERRIDE
 
void setEmbedMode (bool embed)
 设置为嵌入模式,而不是替换系统标题栏,用于不支持dxcb的平台
 
bool menuIsVisible () const
 菜单按钮的可视化
 
void setMenuVisible (bool visible)
 设置菜单是否可见
 
bool menuIsDisabled () const
 
void setMenuDisabled (bool disabled)
 菜单是否被禁用
 
bool quitMenuIsDisabled () const
 退出菜单是否被禁用
 
void setQuitMenuDisabled (bool disabled)
 设置退出菜单是否被禁用
 
void setQuitMenuVisible (bool visible)
 设置退出菜单是否可见
 
bool switchThemeMenuIsVisible () const
 设置主题切换菜单的可视化
 
void setSwitchThemeMenuVisible (bool visible)
 设置切换主题菜单是否可见
 
void setDisableFlags (Qt::WindowFlags flags)
 设置需要被禁用的按钮,仅仅是在界面上禁用按钮,还是可以通过事件等机制来调用对应接口
 
Qt::WindowFlags disableFlags () const
 当前被禁用的按钮标志位
 
void setSplitScreenEnabled (bool enabled)
 
bool splitScreenIsEnabled () const
 
virtual QSize sizeHint () const override
 
virtual QSize minimumSizeHint () const override
 
bool blurBackground () const
 
void setFullScreenButtonVisible (bool enabled)
 
DTitlebarSettingssettings ()
 

Protected 成员函数

bool eventFilter (QObject *obj, QEvent *event) Q_DECL_OVERRIDE
 
bool event (QEvent *e) override
 
void showEvent (QShowEvent *event) Q_DECL_OVERRIDE
 
void mousePressEvent (QMouseEvent *event) Q_DECL_OVERRIDE
 
void mouseReleaseEvent (QMouseEvent *event) Q_DECL_OVERRIDE
 
void mouseMoveEvent (QMouseEvent *event) Q_DECL_OVERRIDE
 
void mouseDoubleClickEvent (QMouseEvent *event) Q_DECL_OVERRIDE
 
void resizeEvent (QResizeEvent *event) Q_DECL_OVERRIDE
 

属性

bool blurBackground
 

详细描述

Dtitlebar是Dtk程序通用的标题栏组件,用于实现标题栏的高度定制化

DTitlebar 概述

Dtitlebar是Dtk程序通用的标题栏组件,用于实现标题栏的高度定制化。

当我们新建一个DMainWindow窗口,窗口则会自带一个 DTitlebar ,其包含默认的菜单,包括 主题切换、关于、退出等功能,如下图:

dtitlebar_example1

有时候我们开发一个应用,具有很多自己的功能,这些功能需要添加到标题栏中分门别类供用户选择,这是就需要自定义自己的DTitlebar。 下面通过一个简单的例子来创建自己的titlebar,添加自己的菜单

项目目录结构在同一目录下

CMakeLists.txt

cmake_minimum_required(VERSION 3.1.0) # 指定cmake最低版本
project(example1 VERSION 1.0.0 LANGUAGES CXX) # 指定项目名称, 版本, 语言 cxx就是c++
set(CMAKE_CXX_STANDARD 11) # 指定c++标准
set(CMAKE_CXX_STANDARD_REQUIRED ON) # 指定c++标准要求,至少为11以上
set(target example1) # 指定目标名称
set(CMAKE_AUTOMOC ON) # support qt moc # 支持qt moc
set(CMAKE_AUTORCC ON) # support qt resource file # 支持qt资源文件
set(CMAKE_AUTOUIC ON) # support qt ui file # 支持qt ui文件(非必须)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # support clangd 支持 clangd
if (CMAKE_VERSION VERSION_LESS "3.7.0") # 如果cmake版本小于3.7.0
set(CMAKE_INCLUDE_CURRENT_DIR ON) # 设置包含当前目录
endif()
find_package(Qt5 COMPONENTS Widgets REQUIRED) # 寻找Qt5组件Widgets
find_package(Qt5 COMPONENTS Gui REQUIRED) # 寻找Qt5组件Gui
find_package(Dtk COMPONENTS Widget REQUIRED) # 寻找Dtk组件Widget
find_package(Dtk COMPONENTS Core REQUIRED) # 寻找Dtk组件Core
find_package(Dtk COMPONENTS Gui) # 寻找Dtk组件Gui
add_executable(example1 # 添加可执行文件
main.cpp
)
target_link_libraries(example1 PRIVATE
Qt5::Widgets
Qt5::Gui
dtkgui
dtkcore
dtkwidget
) # 链接库

main.cpp

#include <DApplication>
#include <DTitlebar>
#include <DMainWindow>
#include <DMenu>
#include <DStyle>
DWIDGET_USE_NAMESPACE //使用DTK widget命名空间
int main(int argc, char *argv[]){
DApplication app(argc, argv);
win.resize(400,250);
DTitlebar *bar = win.titlebar(); //窗口会自带一个titlebar,直接调用
DMenu *menu = bar->menu()->addMenu("文件"); //新建一个文件菜单,并用一个 menu 指针来接收这个菜单并管理
bar->menu()->addSeparator(); //添加一个分隔符
menu->addAction("新建"); //menu菜单下添加可选项 “新建”
menu->addAction("打开");
menu->addAction("关闭");
menu->setIcon(menu->style()->standardIcon(DStyle::SP_DirIcon)); //给文件菜单添加一个自带图标
bar->setQuitMenuDisabled(true); //设置退出菜单为不可用
bar->setSwitchThemeMenuVisible(false); //设置主题更换菜单为不可见
win.show();
return app.exec();
}
DApplication 是 DTK 中用于替换 QCoreApplication 相关功能实现的类.
Definition dapplication.h:33
The DMainWindow class provides a main application window.
Definition dmainwindow.h:20
DTitlebar * titlebar() const
DMainWindow::titlebar
Definition dmainwindow.cpp:196
Dtitlebar是Dtk程序通用的标题栏组件,用于实现标题栏的高度定制化
Definition dtitlebar.h:24
void setQuitMenuDisabled(bool disabled)
设置退出菜单是否被禁用
Definition dtitlebar.cpp:1621
void setSwitchThemeMenuVisible(bool visible)
设置切换主题菜单是否可见
Definition dtitlebar.cpp:1665
QMenu * menu() const
获取和标题栏关联的应用查询菜单
Definition dtitlebar.cpp:948

以上代码运行效果如下图所示:

dtitlebar_example2

从代码中我们可以看出,对不需要的功能项进行了 setQuitMenuDisabled 和 setSwitchThemeMenuVisible 操作,对比图dtitlebar_example1和dtitlebar_example2 我们发现图dtitlebar_example2中主题切换菜单不见了,而退出选项还有,只是不能点击,它们适用于不同的场景,可以根据具体场景进行选择

有些情况下,例如安装重要组件时,中途退出可能导致很多麻烦,为了放置用户误操作,我们可能连关闭按钮都不希望用户点击,这时可以对窗口进行设置,使用如下代码:

win.setWindowFlags(Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint);

以上代码是设置窗口titlebar上哪些按钮会显示,添加进去的会显示,不添加则不显示。上述代码添加了最小化最大化窗口按钮,没有添加窗口关闭按钮,所以窗口关闭按钮不显示,效果如下:

dtitlebar_example3

对菜单中的选项添加对应的连接和代码实现就能实现不同的功能响应了。

构造及析构函数说明

◆ DTitlebar()

Dtk::Widget::DTitlebar::DTitlebar ( QWidget *  parent = Q_NULLPTR)
explicit

构造函数,创建一个DTitlebar对象,包含默认的窗口按钮.

参数
[in]parent父控件指针

成员函数说明

◆ customWidget()

QWidget * Dtk::Widget::DTitlebar::customWidget ( ) const

标题栏绑定的自定义控件,可以通过自定义控件来在标题栏上显示复杂的组合控件

返回
自定义控件
参数
[in]Dtk::Widget::DTitlebar::setCustomWidget()

◆ disableFlags()

Qt::WindowFlags Dtk::Widget::DTitlebar::disableFlags ( ) const

当前被禁用的按钮标志位

返回
被禁用的窗口标志

◆ menu()

QMenu Dtk::Widget::DTitlebar::menu ( ) const

获取和标题栏关联的应用查询菜单

返回
如该标题栏没有设置菜单,这里会返回空,但是如该使用 Dtk::Widget::DApplication , 那么这里一般会自动创建一个程序菜单

◆ menuIsVisible()

bool Dtk::Widget::DTitlebar::menuIsVisible ( ) const

菜单按钮的可视化

返回
true 菜单可见 false菜单不可见

◆ quitMenuIsDisabled()

bool Dtk::Widget::DTitlebar::quitMenuIsDisabled ( ) const

退出菜单是否被禁用

返回
true 退出菜单被禁用 false退出菜单没有被禁用

◆ setAutoHideOnFullscreen()

void Dtk::Widget::DTitlebar::setAutoHideOnFullscreen ( bool  autohide)

设置全屏模式下是否需要自动隐藏标题栏

参数
[in]autohide是否自动隐藏

◆ setBackgroundTransparent

void Dtk::Widget::DTitlebar::setBackgroundTransparent ( bool  transparent)
slot

设置标题栏背景是否透明,当为透明时标题栏直接叠加在下层控件上.

参数
[in]transparent是否透明

◆ setDisableFlags()

void Dtk::Widget::DTitlebar::setDisableFlags ( Qt::WindowFlags  flags)

设置需要被禁用的按钮,仅仅是在界面上禁用按钮,还是可以通过事件等机制来调用对应接口

参数
[in]flags需要被禁用的按钮标志位

◆ setEmbedMode()

void Dtk::Widget::DTitlebar::setEmbedMode ( bool  visible)

设置为嵌入模式,而不是替换系统标题栏,用于不支持dxcb的平台

参数
[in]visible为 true 时,替换系统标题栏,否则隐藏系统标题栏

◆ setFixedHeight

void Dtk::Widget::DTitlebar::setFixedHeight ( int  h)
slot

设置标题栏的高度,默认高度为 50。

参数
[in]h需要设置的高度

◆ setIcon

void Dtk::Widget::DTitlebar::setIcon ( const QIcon &  icon)
slot

设置标题栏图标

参数
[in]icon待设置的图标

◆ setMenu()

void Dtk::Widget::DTitlebar::setMenu ( QMenu *  menu)

设置自定义的程序菜单

参数
[in]menu需要被设置的菜单

◆ setMenuDisabled()

void Dtk::Widget::DTitlebar::setMenuDisabled ( bool  disabled)

菜单是否被禁用

返回
true 菜单被禁用 false 菜单没有被禁用

◆ setMenuVisible()

void Dtk::Widget::DTitlebar::setMenuVisible ( bool  visible)

设置菜单是否可见

参数
[in]visibletrue 菜单可见 false菜单不可见

◆ setQuitMenuDisabled()

void Dtk::Widget::DTitlebar::setQuitMenuDisabled ( bool  disabled)

设置退出菜单是否被禁用

参数
[in]disabledtrue 退出菜单被禁用 false退出菜单没有被禁用

◆ setQuitMenuVisible()

void Dtk::Widget::DTitlebar::setQuitMenuVisible ( bool  visible)

设置退出菜单是否可见

参数
[in]visibletrue 退出菜单可见 false退出菜单不可见

◆ setSeparatorVisible

void Dtk::Widget::DTitlebar::setSeparatorVisible ( bool  visible)
slot

设置菜单下面的分隔线是否可见,默认是可见的

参数
[in]visible是否可见

◆ setSwitchThemeMenuVisible()

void Dtk::Widget::DTitlebar::setSwitchThemeMenuVisible ( bool  visible)

设置切换主题菜单是否可见

参数
[in]visibletrue 切换主题菜单可见 false 切换主题菜单不可见

◆ setTitle

void Dtk::Widget::DTitlebar::setTitle ( const QString &  title)
slot

设置标题栏文本。

参数
[in]title待设置内容

◆ switchThemeMenuIsVisible()

bool Dtk::Widget::DTitlebar::switchThemeMenuIsVisible ( ) const

设置主题切换菜单的可视化

返回
true 切换主题菜单可见 false切换主题菜单不可见

该类的文档由以下文件生成: