|
| 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) |
|
DTitlebarSettings * | settings () |
|
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
int main(int argc, char *argv[]){
win.resize(400,250);
DMenu *
menu = bar->
menu()->addMenu(
"文件");
bar->
menu()->addSeparator();
menu->setIcon(
menu->style()->standardIcon(DStyle::SP_DirIcon));
win.show();
return app.exec();
}
The DMainWindow class provides a main application window.
Definition dmainwindow.h:20
DTitlebar * titlebar() const
DMainWindow::titlebar
Definition dmainwindow.cpp:196
以上代码运行效果如下图所示:
dtitlebar_example2
从代码中我们可以看出,对不需要的功能项进行了 setQuitMenuDisabled 和 setSwitchThemeMenuVisible 操作,对比图dtitlebar_example1和dtitlebar_example2 我们发现图dtitlebar_example2中主题切换菜单不见了,而退出选项还有,只是不能点击,它们适用于不同的场景,可以根据具体场景进行选择
有些情况下,例如安装重要组件时,中途退出可能导致很多麻烦,为了放置用户误操作,我们可能连关闭按钮都不希望用户点击,这时可以对窗口进行设置,使用如下代码:
win.setWindowFlags(Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint);
以上代码是设置窗口titlebar上哪些按钮会显示,添加进去的会显示,不添加则不显示。上述代码添加了最小化最大化窗口按钮,没有添加窗口关闭按钮,所以窗口关闭按钮不显示,效果如下:
dtitlebar_example3
对菜单中的选项添加对应的连接和代码实现就能实现不同的功能响应了。