山前大桥下,有一个傻瓜。一枚小学生,幽居荒山中。养了一群狗,还有一只猫。喜欢搞编程,缺钱打零工。数理史皆通,法文记心中。下厨会做饭,挥毫能舞文。
书接上一回,封装完导航窗口之后作者发现在ListView的使用中存在一个比较容易忽视的细节:当列表为空时列表区域空荡荡,为了更加友好的体验,这时候开发者就需要判断列表是否有数据,然后自行完成列表显示或隐藏 或者通过页面切换来实现一个空数据封面提醒。考虑到上述问题,为了增加良好的体验,作者在带导航的基础列表中增加了封面功能,用户只调用基础类的CheckDataDisplay函数即可实现展示封面或数据,这一切由列表基础类自动维护,不需要用户在写额外的代码。列表空数据封面类截图如下:
封面功能支持所有自定义,可自定义范围如下:
1、封面图片,为了适应高分屏笔者全部使用svg
2、封面标题
3、封面描述
4、自定义按钮,按钮个数在初始化时自行添加,Load Data是用户不传参初始化时自动设置的默认按钮,如果用户传参那么按钮将为用户自定义按钮。
5、按钮单击事件信号发出,支持自定义处理
封面功能除了空数据封面之外还封装了加载等待,当用户调用LoadingStarted时ListView基类会显示封面并切换到加载模式,加载模式中提供多种加载进度动画选择。
由于本篇主要针对之前ListView封装的延续,因此不在继续描述新功能,本篇中重点给出部分IndexNavList的基础类的基本功能封装
注意上面提到的封面功能 在当前文章中并未提供,有关详细可加入作者QQ群获取更多帮助。群号:717743458
列表风格数据结构体定义如下哈哈
/// 索引面板风格结构体
///
typedef struct LISTNAVIINDEX_STYLE_{
QColor cNaviPanelBkgd = Qt::transparent; //导航条背景颜色
QColor cNavPaneBorder = QColor(66,66,66,66); //导航条边框颜色
double dNavPaneRadius = 0.5; //导航条背景圆角比例
uint uNavPaneBorder = 0; //导航条边框宽度,0表示不显示边框
uint uNavBtnsBorder = 0; //导航条按钮边框宽度,0表示不显示边框
uint uNavButtonSize = 12; //导航按钮大小
uint uNavGridBnSize = 36; //窗格按钮大小
uint uNavBnFontSize = 7; //按钮文字大小
uint uNavGridFontSz = 13; //窗格按钮文字大小
QColor cNavBtnsBorder = QColor(66,66,66,66); //导航按钮边框颜色
QColor cNavDisableFrm = QColor(99,99,99,66); //导航条按钮禁用边框颜色
QColor cNavBtnBkgClrs = QColor(44,44,44,44); //导航按钮背景色
QColor cNavBtnTxtClrs = QColor(44,44,44); //导航按钮文字色
QColor cNavBtnBgHover = QColor(111,131,219); //导航按钮悬停背景色
QColor cNavBtnDisable = QColor(99,99,99,44); //导航按钮禁用背景色
QColor cNavTextHovers = QColor(255,255,255); //导航按钮悬停文字颜色
QColor cNavBtnsSelect = QColor(250,93,51); //导航按钮悬停背景色
QColor cNavTextSelect = QColor(255,255,255); //导航按钮悬停文字颜色
QColor cNavTxtDisable = QColor(127,127,127); //导航按钮禁用文字色
double dNavBtnsRadius = 0.5; //导航条按钮圆角比例
uint uDockAlignment = 1; //停靠位置,0左,1右
bool bHasAlwaysShow = true; //总是显示导航条,如果为false则鼠标移动到边缘时才显示
uint uNavTipsFtSize = 12; //导航提示字体大小
uint uNavPaddingVal = 2; //导航条水平边距
//SetNavPanelStyle函数不会修改下面的属性,若要修改下面的属性请使用单独的函数
double dNavTipsRadius; //导航提示圆角比例,0-0.5。0
QColor cNavTipBkgClrs; //导航提示背景色
QColor cNavTipsArrows; //导航提示箭头背景色
QColor cNavTipsColors; //导航提示文字颜色
bool operator == (const LISTNAVIINDEX_STYLE_& rhs) // != 操作运算符重载
{
//代码省略
}
bool operator != (const LISTNAVIINDEX_STYLE_& rhs) // != 操作运算符重载
{
return !(*this == rhs);
}
列表头文件定义如下:
class Lncf_NavIndexPanel;
class Lncf_NavIndexGrids;
class Lncf_DataNullCover;
class LNCF_QTSOCIALLIBS_API Lncf_IndexNavListv : public QListView
{
Q_OBJECT
//属性定义省略
public:
explicit Lncf_IndexNavListv(QWidget *parent = nullptr);
~Lncf_IndexNavListv();
public:
/// 初始化列表虚函数
/// \brief InitNavBaseList
/// \param bGrid :是否使用窗格导航,默认为垂直导航条
/// \param bShowNav :是否显示导航,在垂直导航条模式时控制是否总是显示
///
virtual void InitNavBaseList(bool bGrid =false,bool bShowNav=true);
/// 更改导航风格
/// \brief ChangeNavStyles
/// \param bGrid
///
void ChangeNavStyles(const bool bGrid);
protected:
/// 重写系统显示事件
/// \brief showEvent
/// \param event
///
void showEvent(QShowEvent *event) override;
/// 重写系统大小改变事件
void resizeEvent(QResizeEvent *event) override;
/// 重写系统鼠标移动事件
/// \brief mouseMoveEvent
/// \param event
///
void mouseMoveEvent(QMouseEvent *event) override;
/// 更新导航条位置
/// \brief UpdateNavPanelPos
///
void UpdateNavPanelPos();
public:
virtual void setModel(QAbstractItemModel *model) override;
private:
// 导航栏控件
Lncf_NavIndexPanel *pPanelNavIndex = nullptr;
Lncf_NavIndexGrids *pGridsNavIndex = nullptr;
// 封面部件
Lncf_DataNullCover *pCoversWidgets = nullptr;
bool bHasFristsShow = true;
bool bShowNaviPanel = true;
bool bGridNaviStyle = false;//是否使用窗格导航面板,默认是垂直条
bool bDataDisplayed = false;//数据是否显示
LISTNAVIINDEX_STYLE tNavPanelStyle;
public:
/// 获取导航面板风格数据结构
/// \brief GetNavPanelStyle
/// \return
///
LISTNAVIINDEX_STYLE GetNavPanelStyle() const;
/// 获取是否为表格导航
/// \brief GetGridNaviStyle
/// \return
///
bool GetGridNaviStyle() const;
/// 获取导航条背景颜色
/// \brief GetNaviPanelBkgd
/// \return
///
QColor GetNaviPanelBkgd() const;
/// 获取导航条边框颜色
/// \brief GetNavBorderClrs
/// \return
///
QColor GetNavBorderClrs() const;
/// 获取导航条背景圆角比例
/// \brief GetNavPaneRadius
/// \return
///
double GetNavPaneRadius() const;
/// 获取导航条边框宽度,0表示不显示边框
/// \brief GetNavPaneBorderWide
/// \return
///
uint GetNavPaneBorderWide() const;
/// 获取导航条按钮边框宽度,0表示不显示边框
/// \brief GetNavBtnsBorderWide
/// \return
///
uint GetNavBtnsBorderWide() const;
/// 获取导航按钮大小
/// \brief GetNavButtonSize
/// \return
///
uint GetNavButtonSize() const;
/// 获取窗格按钮大小
/// \brief GetNavGridBnSize
/// \return
///
uint GetNavGridBnSize() const;
/// 获取按钮文字大小
/// \brief GetNavBnFontSize
/// \return
///
uint GetNavBnFontSize() const;
/// 获取窗格按钮文字大小
/// \brief GetNavGridFontSz
/// \return
///
uint GetNavGridFontSz() const;
/// 获取导航条边框颜色
/// \brief GetNavBtnsBorderClrs
/// \return
///
QColor GetNavBtnsBorder() const;
/// 获取导航按钮背景色
/// \brief GetNavBtnBkgClrs
/// \return
///
QColor GetNavBtnBkgClrs() const;
/// 获取导航按钮文字色
/// \brief GetNavBtnTxtClrs
/// \return
///
QColor GetNavBtnTxtClrs() const;
/// 获取导航按钮悬停背景色
/// \brief GetNavBtnBgHover
/// \return
///
QColor GetNavBtnBgHover() const;
/// 获取导航按钮悬停文字颜色
/// \brief GetNavTextHovers
/// \return
///
QColor GetNavTextHovers() const;
/// 获取导航按钮悬停背景色
/// \brief GetNavBtnsSelect
/// \return
///
QColor GetNavBtnsSelect() const;
/// 获取导航按钮悬停文字颜色
/// \brief GetNavTextSelect
/// \return
///
QColor GetNavTextSelect() const;
/// 获取导航条按钮圆角比例
/// \brief GetNavBtnsRadius
/// \return
///
double GetNavBtnsRadius() const;
/// 获取停靠位置,0左,1右
/// \brief GetDockAlignment
/// \return
///
uint GetDockAlignment() const;
/// 获取总是显示导航条,如果为false则鼠标移动到边缘时才显示
/// \brief GetHasAlwaysShow
/// \return
///
bool GetHasAlwaysShow() const;
/// 获取导航条水平边距
/// \brief GetNavPaddingVal
/// \return
///
uint GetNavPaddingVal() const;
/// 获取导航字符索引
/// \brief GetNaviTextsList
/// \return
///
QList<std::u16string> GetNaviTextsList() const;
//SetNavPanelStyle函数不会修改下面的属性,若要修改下面的属性请使用单独的函数
/// 获取导航提示字体大小
/// \brief GetNavTipsFtSize
/// \return
///
uint GetNavTipsFtSize() const;
/// 获取导航提示圆角比例,0-0.5。0
/// \brief GetNavTipsRadius
/// \return
///
double GetNavTipsRadius() const;
/// 获取导航提示背景色
/// \brief GetNavTipBkgClrs
/// \return
///
QColor GetNavTipBkgClrs() const;
/// 获取导航提示箭头背景色
/// \brief GetNavTipsArrows
/// \return
///
QColor GetNavTipsArrows() const;
/// 获取导航提示文字颜色
/// \brief GetNavTipsColors
/// \return
///
QColor GetNavTipsColors() const;
/// 获取是否显示提醒
/// \brief GetIsShowTooltip
/// \return
///
bool GetIsShowTooltip() const;
/// 获取垂直导航条显示属性
/// \brief GetShowNaviPanel
/// \return
///
bool GetShowNaviPanel() const;
public slots:
/// 设置导航按钮启用状态
/// \brief SetNaviBtnEnable
/// \param uIndex
/// \param bEnable
///
void SetNaviBtnEnable(uint uIndex,bool bEnable);
/// 设置索引导航风格
/// \brief SetNavPanelStyle
/// \param tStyle
///
void SetNavPanelStyle(LISTNAVIINDEX_STYLE tStyle);
/// 设置导航条背景颜色
/// \brief SetNaviPanelBkgd
/// \param cValue
///
void SetNaviPanelBkgd(const QColor cValue);
/// 设置导航条边框颜色
/// \brief SetNavPaneBorder
/// \param cValue
///
void SetNavPaneBorder(const QColor cValue);
/// 设置导航条背景圆角比例
/// \brief SetNavPaneRadius
/// \param dValue
///
void SetNavPaneRadius(const double dValue);
/// 设置导航条边框宽度,0表示不显示边框
/// \brief SetNavPaneBorderWide
/// \param nValue 边框宽度,边框不能太宽,不能超过4
///
void SetNavPaneBorderWide(const uint nValue);
/// 设置导航条按钮边框宽度,0表示不显示边框
/// \brief SetNavBtnsBorderWide
/// \param nValue
///
void SetNavBtnsBorderWide(const uint nValue);
/// 设置导航按钮大小
/// \brief SetNavButtonSize
/// \param nValue
///
void SetNavButtonSize(const uint nValue);
/// 设置窗格按钮大小
/// \brief SetNavGridBnSize
/// \param nValue
///
void SetNavGridBnSize(const uint nValue);
/// 设置按钮文字大小
/// \brief SetNavBnFontSize
/// \param nValue
///
void SetNavBnFontSize(const uint nValue);
/// 设置窗格按钮文字大小
/// \brief SetNavGridFontSz
/// \param nValue
///
void SetNavGridFontSz(const uint nValue);
/// 设置导航条边框颜色
/// \brief SetNavBtnsBorder
/// \param cValue
///
void SetNavBtnsBorder(const QColor cValue);
/// 设置导航按钮背景色
/// \brief SetNavBtnBkgClrs
/// \param cValue
///
void SetNavBtnBkgClrs(const QColor cValue);
/// 设置导航按钮文字色
/// \brief SetNavBtnTxtClrs
/// \param cValue
///
void SetNavBtnTxtClrs(const QColor cValue);
/// 设置导航按钮悬停背景色
/// \brief SetNavBtnBgHover
/// \param cValue
///
void SetNavBtnBgHover(const QColor cValue);
/// 设置导航按钮悬停文字颜色
/// \brief SetNavTextHovers
/// \param cValue
///
void SetNavTextHovers(const QColor cValue);
/// 设置导航按钮悬停背景色
/// \brief SetNavBtnsSelect
/// \param cValue
///
void SetNavBtnsSelect(const QColor cValue);
/// 设置导航按钮悬停文字颜色
/// \brief SetNavTextSelect
/// \param cValue
///
void SetNavTextSelect(const QColor cValue);
/// 设置导航条按钮圆角比例
/// \brief SetNavBtnsRadius
/// \param dValue
///
void SetNavBtnsRadius(const double dValue);
/// 设置停靠位置,0左,1右
/// \brief SetDockAlignment
/// \param nValue
///
void SetDockAlignment(const uint nValue);
/// 设置总是显示导航条,如果为false则鼠标移动到边缘时才显示
/// \brief SetHasAlwaysShow
/// \param bValue
///
void SetHasAlwaysShow(const bool bValue);
/// 设置导航条水平边距
/// \brief SetNavPaddingVal
/// \param uValue
///
void SetNavPaddingVal(const uint uValue);
/// 设置导航字符索引,不能小于29个,超过29个将不会被显示
/// \brief SetNaviTextsList
/// \param sList
///
void SetNaviTextsList(QList<std::u16string> sList);
//SetNavPanelStyle函数不会修改下面的属性,若要修改下面的属性请使用单独的函数
/// 设置导航提示字体大小
/// \brief SetNavTipsFtSize
/// \param nValue
///
void SetNavTipsFtSize(const uint nValue);
/// 设置导航提示圆角比例,0-0.5。0
/// \brief SetNavTipsRadius
/// \param dValue
///
void SetNavTipsRadius(const double dValue);
/// 设置导航提示背景色
/// \brief SetNavTipBkgClrs
/// \param cValue
///
void SetNavTipBkgClrs(const QColor cValue);
/// 设置导航提示箭头背景色
/// \brief SetNavTipsArrows
/// \param cValue
///
void SetNavTipsArrows(const QColor cValue);
/// 设置导航提示文字颜色
/// \brief SetNavTipsColors
/// \param cValue
///
void SetNavTipsColors(const QColor cValue);
/// 设置是否显示导航提醒
/// \brief SetIsShowTooltip
/// \param bValue
///
void SetIsShowTooltip(const bool &bValue);
/// 设置导航索引选中
/// \brief SetNavIndexCheck
/// \param uIndex
///
void SetNavIndexCheck(const uint uIndex,const bool bShowGrid=false);
/// 导航索引被选中
/// \brief NaviIndexChecked
/// \param uIndex
///
virtual void NaviIndexChecked(const uint uIndex);
/// 设置垂直导航条显示属性
/// \brief SetShowNaviPanel
/// \param bValue
///
void SetShowNaviPanel(const bool bValue);
signals:
/// 按钮选中事件
/// \brief NavBtnCheckEvts
/// \param uIndex :选中的按钮索引0表示所有#按钮,1-26表示字母A到Z,27=数字按钮
///
void NavBtnCheckEvts(const uint uIndex);
列表基础类部分实现代码如下:
Lncf_IndexNavListv::Lncf_IndexNavListv(QWidget *parent)
:QListView(parent)
{
}
Lncf_IndexNavListv::~Lncf_IndexNavListv()
{
if(pCoversWidgets)
delete pCoversWidgets;
}
/// 初始化列表虚函数
/// \brief InitNavBaseList
/// \param bGrid
/// \param bShowNav
///
void Lncf_IndexNavListv::InitNavBaseList(bool bGrid,bool bShowNav)
{
bGridNaviStyle = bGrid;
if(!bGridNaviStyle){
pPanelNavIndex = new Lncf_NavIndexPanel(this,tNavPanelStyle.uDockAlignment);
pPanelNavIndex->setObjectName("navPanel");
pPanelNavIndex->SetDockAlignment(tNavPanelStyle.uDockAlignment);
connect(pPanelNavIndex, &Lncf_NavIndexPanel::NavBtnCheckEvts,this, &Lncf_IndexNavListv::NaviIndexChecked);
bShowNaviPanel = bShowNav;
}
else{
pGridsNavIndex = new Lncf_NavIndexGrids(this);
pGridsNavIndex->setObjectName("navGrids");
connect(pGridsNavIndex, &Lncf_NavIndexGrids::NavBtnCheckEvts,this, &Lncf_IndexNavListv::NaviIndexChecked);
}
this->setMouseTracking(true);
SetNavPanelStyle(tNavPanelStyle);
}
/// 更改导航风格
/// \brief ChangeNavStyles
/// \param bGrid
///
void Lncf_IndexNavListv::ChangeNavStyles(const bool bGrid)
{
if(bGridNaviStyle!=bGrid)
{
bGridNaviStyle =bGrid;
if(bGridNaviStyle){
if(pPanelNavIndex)pPanelNavIndex->hide();
if(!pGridsNavIndex){
pGridsNavIndex = new Lncf_NavIndexGrids(this);
pGridsNavIndex->setObjectName("navGrids");
connect(pGridsNavIndex, &Lncf_NavIndexGrids::NavBtnCheckEvts,this, &Lncf_IndexNavListv::NaviIndexChecked);
pGridsNavIndex->hide();
}
SetNavPanelStyle(tNavPanelStyle);
}
else{
if(pGridsNavIndex)pGridsNavIndex->hide();
if(!pPanelNavIndex)
{
pPanelNavIndex = new Lncf_NavIndexPanel(this,tNavPanelStyle.uDockAlignment);
pPanelNavIndex->setObjectName("navPanel");
pPanelNavIndex->SetDockAlignment(tNavPanelStyle.uDockAlignment);
connect(pPanelNavIndex, &Lncf_NavIndexPanel::NavBtnCheckEvts,this, &Lncf_IndexNavListv::NaviIndexChecked);
if(tNavPanelStyle.uDockAlignment==0)
pPanelNavIndex->move(this->tNavPanelStyle.uNavPaddingVal,this->height()/2-pPanelNavIndex->height()/2);
else
pPanelNavIndex->move(this->width()-pPanelNavIndex->width()-this->tNavPanelStyle.uNavPaddingVal,this->height()/2-pPanelNavIndex->height()/2);
if(bShowNaviPanel&&bDataDisplayed)
pPanelNavIndex->show();
else pPanelNavIndex->hide();
}
SetNavPanelStyle(tNavPanelStyle);
}
UpdateNavPanelPos();
}
}
/// 重写系统显示事件
/// \brief showEvent
/// \param event
///
void Lncf_IndexNavListv::showEvent(QShowEvent *event)
{
if(bHasFristsShow)
{
if(!bGridNaviStyle){
if(tNavPanelStyle.uDockAlignment==0)
pPanelNavIndex->move(this->tNavPanelStyle.uNavPaddingVal,this->height()/2-pPanelNavIndex->height()/2);
else
pPanelNavIndex->move(this->width()-pPanelNavIndex->width()-this->tNavPanelStyle.uNavPaddingVal,this->height()/2-pPanelNavIndex->height()/2);
if(bShowNaviPanel&&bDataDisplayed)
pPanelNavIndex->show();
else pPanelNavIndex->hide();
}
else{
if(pGridsNavIndex){
pGridsNavIndex->move(0,0);
pGridsNavIndex->resize(this->size());
pGridsNavIndex->hide();
}
}
bHasFristsShow = false;
}
QListView::showEvent(event);
}
/// 重写系统大小改变事件
void Lncf_IndexNavListv::resizeEvent(QResizeEvent *event)
{
UpdateNavPanelPos();
QListView::resizeEvent(event);
}
/// 重写系统鼠标移动事件
/// \brief mouseMoveEvent
/// \param event
///
void Lncf_IndexNavListv::mouseMoveEvent(QMouseEvent *event)
{
if(event&&pPanelNavIndex)
{
if(!pPanelNavIndex->underMouse()){
pPanelNavIndex->HideTooltipFrame();
}
}
return QListView::mouseMoveEvent(event);
}
/// 更新导航条位置
/// \brief UpdateNavPanelPos
///
void Lncf_IndexNavListv::UpdateNavPanelPos()
{
if(!bGridNaviStyle){
if(tNavPanelStyle.uDockAlignment==0&&pPanelNavIndex){
if(pPanelNavIndex)
pPanelNavIndex->move(this->tNavPanelStyle.uNavPaddingVal,this->height()/2-pPanelNavIndex->height()/2);
}
else
if(pPanelNavIndex)
pPanelNavIndex->move(this->width()-pPanelNavIndex->width()-this->tNavPanelStyle.uNavPaddingVal,this->height()/2-pPanelNavIndex->height()/2);
}
else{
if(pGridsNavIndex){
pGridsNavIndex->move(0,0);
pGridsNavIndex->resize(this->size());
}
}
}
void Lncf_IndexNavListv::setModel(QAbstractItemModel *model)
{
return QListView::setModel(model);
}
/// 获取封面对象指针
/// 说明:如果要设置封面对象风格和操作封面接口请使用此接口访问
/// \brief GetCoversWidgets
/// \return
///
Lncf_DataNullCover *Lncf_IndexNavListv::GetCoversWidgets() const
{
return this->pCoversWidgets;
}
/// 获取控件信息
/// \brief GetSocialCtlInfo
/// \return
///
LNCFQT_SOCIALCTL_INF Lncf_IndexNavListv::GetSocialCtlInfo()
{
return {typeid (this).name(),tr("Social Navigate Index ListView Control")};
}
/// 获取导航面板风格数据结构
/// \brief GetNavPanelStyle
/// \return
///
LISTNAVIINDEX_STYLE Lncf_IndexNavListv::GetNavPanelStyle() const
{
return this->tNavPanelStyle;
}
/// 获取是否为表格导航
/// \brief GetGridNaviStyle
/// \return
///
bool Lncf_IndexNavListv::GetGridNaviStyle() const
{
return this->bGridNaviStyle;
}
/// 获取导航条背景颜色
/// \brief GetNaviPanelBkgd
/// \return
///
QColor Lncf_IndexNavListv::GetNaviPanelBkgd() const
{
return this->tNavPanelStyle.cNaviPanelBkgd;
}
/// 获取导航条边框颜色
/// \brief GetNavBorderClrs
/// \return
///
QColor Lncf_IndexNavListv::GetNavBorderClrs() const
{
return this->tNavPanelStyle.cNavPaneBorder;
}
/// 获取导航条背景圆角比例
/// \brief GetNavPaneRadius
/// \return
///
double Lncf_IndexNavListv::GetNavPaneRadius() const
{
return this->tNavPanelStyle.dNavPaneRadius;
}
/// 获取导航条边框宽度,0表示不显示边框
/// \brief GetNavPaneBorderWide
/// \return
///
uint Lncf_IndexNavListv::GetNavPaneBorderWide() const
{
return this->tNavPanelStyle.uNavPaneBorder;
}
/// 获取导航条按钮边框宽度,0表示不显示边框
/// \brief GetNavBtnsBorderWide
/// \return
///
uint Lncf_IndexNavListv::GetNavBtnsBorderWide() const
{
return this->tNavPanelStyle.uNavBtnsBorder;
}
/// 获取导航按钮大小
/// \brief GetNavButtonSize
/// \return
///
uint Lncf_IndexNavListv::GetNavButtonSize() const
{
return this->tNavPanelStyle.uNavButtonSize;
}
/// 获取窗格按钮大小
/// \brief GetNavGridBnSize
/// \return
///
uint Lncf_IndexNavListv::GetNavGridBnSize() const
{
return this->tNavPanelStyle.uNavGridBnSize;
}
/// 获取按钮文字大小
/// \brief GetNavBnFontSize
/// \return
///
uint Lncf_IndexNavListv::GetNavBnFontSize() const
{
return this->tNavPanelStyle.uNavBnFontSize;
}
/// 获取窗格按钮文字大小
/// \brief GetNavGridFontSz
/// \return
///
uint Lncf_IndexNavListv::GetNavGridFontSz() const
{
return this->tNavPanelStyle.uNavGridFontSz;
}
/// 获取导航条边框颜色
/// \brief GetNavBtnsBorderClrs
/// \return
///
QColor Lncf_IndexNavListv::GetNavBtnsBorder() const
{
return this->tNavPanelStyle.cNavBtnsBorder;
}
/// 获取导航按钮背景色
/// \brief GetNavBtnBkgClrs
/// \return
///
QColor Lncf_IndexNavListv::GetNavBtnBkgClrs() const
{
return this->tNavPanelStyle.cNavBtnBkgClrs;
}
/// 获取导航按钮文字色
/// \brief GetNavBtnTxtClrs
/// \return
///
QColor Lncf_IndexNavListv::GetNavBtnTxtClrs() const
{
return this->tNavPanelStyle.cNavBtnTxtClrs;
}
/// 获取导航按钮悬停背景色
/// \brief GetNavBtnBgHover
/// \return
///
QColor Lncf_IndexNavListv::GetNavBtnBgHover() const
{
return this->tNavPanelStyle.cNavBtnBgHover;
}
/// 获取导航按钮悬停文字颜色
/// \brief GetNavTextHovers
/// \return
///
QColor Lncf_IndexNavListv::GetNavTextHovers() const
{
return this->tNavPanelStyle.cNavTextHovers;
}
/// 获取导航按钮悬停背景色
/// \brief GetNavBtnsSelect
/// \return
///
QColor Lncf_IndexNavListv::GetNavBtnsSelect() const
{
return this->tNavPanelStyle.cNavBtnsSelect;
}
/// 获取导航按钮悬停文字颜色
/// \brief GetNavTextSelect
/// \return
///
QColor Lncf_IndexNavListv::GetNavTextSelect() const
{
return this->tNavPanelStyle.cNavTextSelect;
}
/// 获取导航条按钮圆角比例
/// \brief GetNavBtnsRadius
/// \return
double Lncf_IndexNavListv::GetNavBtnsRadius() const
{
return this->tNavPanelStyle.dNavBtnsRadius;
}
/// 获取停靠位置,0左,1右
/// \brief GetDockAlignment
/// \return
///
uint Lncf_IndexNavListv::GetDockAlignment() const
{
return this->tNavPanelStyle.uDockAlignment;
}
/// 获取总是显示导航条,如果为false则鼠标移动到边缘时才显示
/// \brief GetHasAlwaysShow
/// \return
///
bool Lncf_IndexNavListv::GetHasAlwaysShow() const
{
return this->tNavPanelStyle.bHasAlwaysShow;
}
/// 获取导航提示箭头背景色
/// \brief GetNavTipsArrows
/// \return
///
QColor Lncf_IndexNavListv::GetNavTipsArrows() const
{
return pPanelNavIndex?pPanelNavIndex->GetTipArrowsBkg():this->tNavPanelStyle.cNavTipsArrows;
}
/// 获取导航提示文字颜色
/// \brief GetNavTipsColors
/// \return
///
QColor Lncf_IndexNavListv::GetNavTipsColors() const
{
return pPanelNavIndex?pPanelNavIndex->GetTipsColorVal():this->tNavPanelStyle.cNavTipsColors;
}
/// 获取是否显示提醒
/// \brief GetIsShowTooltip
/// \return
///
bool Lncf_IndexNavListv::GetIsShowTooltip() const
{
return pPanelNavIndex?pPanelNavIndex->GetIsShowTooltip():false;
}
/// 获取垂直导航条显示属性
/// \brief GetShowNaviPanel
/// \return
///
bool Lncf_IndexNavListv::GetShowNaviPanel() const
{
return this->bShowNaviPanel;
}
/// 设置导航按钮启用状态
/// \brief SetNaviBtnEnable
/// \param uIndex
/// \param bEnable
///
void Lncf_IndexNavListv::SetNaviBtnEnable(uint uIndex,bool bEnable)
{
if(bGridNaviStyle)
return pGridsNavIndex?pGridsNavIndex->SetNaviBtnEnable(uIndex,bEnable):void();
else
return pPanelNavIndex?pPanelNavIndex->SetNaviBtnEnable(uIndex,bEnable):void();
}
/// 设置索引导航风格
/// \brief SetNavPanelStyle
/// \param tStyle
///
void Lncf_IndexNavListv::SetNavPanelStyle(LISTNAVIINDEX_STYLE tStyle)
{
//TODO:
//导航面板风格设置
}
/// 设置导航条背景颜色
/// \brief SetNaviPanelBkgd
/// \param cValue
///
void Lncf_IndexNavListv::SetNaviPanelBkgd(const QColor cValue)
{
if(this->tNavPanelStyle.cNaviPanelBkgd!=cValue){
this->tNavPanelStyle.cNaviPanelBkgd = cValue;
SetNavPanelStyle(this->tNavPanelStyle);
}
}
/// 设置导航条边框颜色
/// \brief SetNavPaneBorder
/// \param cValue
///
void Lncf_IndexNavListv::SetNavPaneBorder(const QColor cValue)
{
if(this->tNavPanelStyle.cNavPaneBorder!=cValue){
this->tNavPanelStyle.cNavPaneBorder = cValue;
SetNavPanelStyle(this->tNavPanelStyle);
}
}
/// 设置导航条背景圆角比例
/// \brief SetNavPaneRadius
/// \param dValue
///
void Lncf_IndexNavListv::SetNavPaneRadius(const double dValue)
{
if(this->tNavPanelStyle.dNavPaneRadius!=dValue&&dValue>-0.001&&dValue<0.501){
this->tNavPanelStyle.dNavPaneRadius = dValue;
SetNavPanelStyle(this->tNavPanelStyle);
}
}
/// 设置导航条边框宽度,0表示不显示边框
/// \brief SetNavPaneBorderWide
/// \param nValue
///
void Lncf_IndexNavListv::SetNavPaneBorderWide(const uint nValue)
{
if(this->tNavPanelStyle.uNavPaneBorder!=nValue&&nValue>=0&&nValue<4){
this->tNavPanelStyle.uNavPaneBorder = nValue;
SetNavPanelStyle(this->tNavPanelStyle);
}
}
/// 设置导航条按钮边框宽度,0表示不显示边框
/// \brief SetNavBtnsBorder
/// \param nValue
///
void Lncf_IndexNavListv::SetNavBtnsBorderWide(const uint nValue)
{
if(this->tNavPanelStyle.uNavBtnsBorder!=nValue&&nValue>=0&&nValue<4){
this->tNavPanelStyle.uNavBtnsBorder = nValue;
SetNavPanelStyle(this->tNavPanelStyle);
}
}
/// 设置导航按钮大小
/// \brief SetNavButtonSize
/// \param nValue
///
void Lncf_IndexNavListv::SetNavButtonSize(const uint nValue)
{
if(this->tNavPanelStyle.uNavButtonSize!=nValue){
this->tNavPanelStyle.uNavButtonSize = nValue;
SetNavPanelStyle(this->tNavPanelStyle);
}
}
/// 设置窗格按钮大小
/// \brief SetNavGridBnSize
/// \param nValue
///
void Lncf_IndexNavListv::SetNavGridBnSize(const uint nValue)
{
if(this->tNavPanelStyle.uNavGridBnSize!=nValue){
this->tNavPanelStyle.uNavGridBnSize = nValue;
SetNavPanelStyle(this->tNavPanelStyle);
}
}
/// 设置按钮文字大小
/// \brief SetNavBnFontSize
/// \param nValue
///
void Lncf_IndexNavListv::SetNavBnFontSize(const uint nValue)
{
if(this->tNavPanelStyle.uNavBnFontSize!=nValue){
this->tNavPanelStyle.uNavBnFontSize = nValue;
SetNavPanelStyle(this->tNavPanelStyle);
}
}
/// 设置窗格按钮文字大小
/// \brief SetNavGridFontSz
/// \param nValue
///
void Lncf_IndexNavListv::SetNavGridFontSz(const uint nValue)
{
if(this->tNavPanelStyle.uNavGridFontSz!=nValue){
this->tNavPanelStyle.uNavGridFontSz = nValue;
SetNavPanelStyle(this->tNavPanelStyle);
}
}
/// 设置导航条边框颜色
/// \brief SetNavBtnsBorder
/// \param cValue
///
void Lncf_IndexNavListv::SetNavBtnsBorder(const QColor cValue)
{
if(this->tNavPanelStyle.cNavBtnsBorder!=cValue){
this->tNavPanelStyle.cNavBtnsBorder = cValue;
SetNavPanelStyle(this->tNavPanelStyle);
}
}
/// 设置导航按钮背景色
/// \brief SetNavBtnBkgClrs
/// \param cValue
///
void Lncf_IndexNavListv::SetNavBtnBkgClrs(const QColor cValue)
{
if(this->tNavPanelStyle.cNavBtnBkgClrs!=cValue){
this->tNavPanelStyle.cNavBtnBkgClrs = cValue;
SetNavPanelStyle(this->tNavPanelStyle);
}
}
/// 设置导航按钮文字色
/// \brief SetNavBtnTxtClrs
/// \param cValue
///
void Lncf_IndexNavListv::SetNavBtnTxtClrs(const QColor cValue)
{
if(this->tNavPanelStyle.cNavBtnTxtClrs!=cValue){
this->tNavPanelStyle.cNavBtnTxtClrs = cValue;
SetNavPanelStyle(this->tNavPanelStyle);
}
}
/// 设置导航按钮悬停背景色
/// \brief SetNavBtnBgHover
/// \param cValue
///
void Lncf_IndexNavListv::SetNavBtnBgHover(const QColor cValue)
{
if(this->tNavPanelStyle.cNavBtnBgHover!=cValue){
this->tNavPanelStyle.cNavBtnBgHover = cValue;
SetNavPanelStyle(this->tNavPanelStyle);
}
}
/// 设置导航按钮悬停文字颜色
/// \brief SetNavTextHovers
/// \param cValue
///
void Lncf_IndexNavListv::SetNavTextHovers(const QColor cValue)
{
if(this->tNavPanelStyle.cNavTextHovers!=cValue){
this->tNavPanelStyle.cNavTextHovers = cValue;
SetNavPanelStyle(this->tNavPanelStyle);
}
}
/// 设置导航按钮悬停背景色
/// \brief SetNavBtnsSelect
/// \param cValue
///
void Lncf_IndexNavListv::SetNavBtnsSelect(const QColor cValue)
{
if(this->tNavPanelStyle.cNavBtnsSelect!=cValue){
this->tNavPanelStyle.cNavBtnsSelect = cValue;
SetNavPanelStyle(this->tNavPanelStyle);
}
}
/// 设置导航按钮悬停文字颜色
/// \brief SetNavTextSelect
/// \param cValue
///
void Lncf_IndexNavListv::SetNavTextSelect(const QColor cValue)
{
if(this->tNavPanelStyle.cNavTextSelect!=cValue){
this->tNavPanelStyle.cNavTextSelect = cValue;
SetNavPanelStyle(this->tNavPanelStyle);
}
}
/// 设置导航条按钮圆角比例
/// \brief SetNavBtnsRadius
/// \param dValue
///
void Lncf_IndexNavListv::SetNavBtnsRadius(const double dValue)
{
if(this->tNavPanelStyle.dNavBtnsRadius!=dValue){
this->tNavPanelStyle.dNavBtnsRadius = dValue;
SetNavPanelStyle(this->tNavPanelStyle);
}
}
/// 设置停靠位置,0左,1右
/// \brief SetDockAlignment
/// \param nValue
///
void Lncf_IndexNavListv::SetDockAlignment(const uint nValue)
{
if(this->tNavPanelStyle.uDockAlignment!=nValue){
this->tNavPanelStyle.uDockAlignment = nValue;
if(!bGridNaviStyle){
if(pPanelNavIndex)pPanelNavIndex->SetDockAlignment(nValue);
if(tNavPanelStyle.uDockAlignment==0)
pPanelNavIndex->move(this->tNavPanelStyle.uNavPaddingVal,this->height()/2-pPanelNavIndex->height()/2);
else
pPanelNavIndex->move(this->width()-pPanelNavIndex->width()-this->tNavPanelStyle.uNavPaddingVal,this->height()/2-pPanelNavIndex->height()/2);
if(bShowNaviPanel&&bDataDisplayed)
pPanelNavIndex->show();
else pPanelNavIndex->hide();
}
}
}
/// 设置总是显示导航条,如果为false则鼠标移动到边缘时才显示
/// \brief SetHasAlwaysShow
/// \param bValue
///
void Lncf_IndexNavListv::SetHasAlwaysShow(const bool bValue)
{
if(this->tNavPanelStyle.bHasAlwaysShow!=bValue){
this->tNavPanelStyle.bHasAlwaysShow = bValue;
}
}
/// 设置导航条水平边距
/// \brief SetNavPaddingVal
/// \param uValue
///
void Lncf_IndexNavListv::SetNavPaddingVal(const uint uValue)
{
if(this->tNavPanelStyle.uNavPaddingVal!=uValue){
this->tNavPanelStyle.uNavPaddingVal = uValue;
if(!bGridNaviStyle){
if(tNavPanelStyle.uDockAlignment==0)
pPanelNavIndex->move(this->tNavPanelStyle.uNavPaddingVal,this->height()/2-pPanelNavIndex->height()/2);
else
pPanelNavIndex->move(this->width()-pPanelNavIndex->width()-this->tNavPanelStyle.uNavPaddingVal,this->height()/2-pPanelNavIndex->height()/2);
if(bShowNaviPanel&&bDataDisplayed)
pPanelNavIndex->show();
else pPanelNavIndex->hide();
}
}
}
/// 设置导航字符索引,不能小于29个,超过29个将不会被显示
/// \brief SetNaviTextsList
/// \param sList
///
void Lncf_IndexNavListv::SetNaviTextsList(QList<std::u16string> sList)
{
if(pPanelNavIndex)
pPanelNavIndex->SetNaviTextsList(sList);
if(pGridsNavIndex)
pGridsNavIndex->SetNaviTextsList(sList);
}
//SetNavPanelStyle函数不会修改下面的属性,若要修改下面的属性请使用单独的函数
/// 设置导航提示字体大小
/// \brief SetNavTipsFtSize
/// \param nValue
///
void Lncf_IndexNavListv::SetNavTipsFtSize(const uint nValue)
{
if(pPanelNavIndex)
pPanelNavIndex->SetTipsFontSize(nValue);
}
/// 设置导航提示圆角比例,0-0.5。0
/// \brief SetNavTipsRadius
/// \param dValue
///
void Lncf_IndexNavListv::SetNavTipsRadius(const double dValue)
{
if(pPanelNavIndex)
pPanelNavIndex->SetTipRadiusVal(dValue);
}
/// 设置导航提示背景色
/// \brief SetNavTipBkgClrs
/// \param cValue
///
void Lncf_IndexNavListv::SetNavTipBkgClrs(const QColor cValue)
{
if(pPanelNavIndex)
pPanelNavIndex->SetTipsBkgColor(cValue);
}
/// 设置导航提示箭头背景色
/// \brief SetNavTipsArrows
/// \param cValue
///
void Lncf_IndexNavListv::SetNavTipsArrows(const QColor cValue)
{
if(pPanelNavIndex)
pPanelNavIndex->SetTipArrowsBkg(cValue);
}
/// 设置导航提示文字颜色
/// \brief SetNavTipsColors
/// \param cValue
///
void Lncf_IndexNavListv::SetNavTipsColors(const QColor cValue)
{
if(pPanelNavIndex)
pPanelNavIndex->SetTipsColorVal(cValue);
}
/// 设置是否显示导航提醒
/// \brief SetIsShowTooltip
/// \param bValue
///
void Lncf_IndexNavListv::SetIsShowTooltip(const bool &bValue)
{
if(pPanelNavIndex)
pPanelNavIndex->SetIsShowTooltip(bValue);
}
/// 设置导航索引选中
/// \brief SetNavIndexCheck
/// \param uIndex
///
void Lncf_IndexNavListv::SetNavIndexCheck(const uint uIndex,const bool bShowGrid)
{
if(!bGridNaviStyle){
pPanelNavIndex->OnNavBtnActived(uIndex);
}
else{
pGridsNavIndex->OnNavBtnActived(uIndex);
if(bShowGrid)pGridsNavIndex->show();
}
}
/// 导航索引被选中
/// \brief NaviIndexChecked
/// \param uIndex
///
void Lncf_IndexNavListv::NaviIndexChecked(const uint uIndex)
{
emit NavBtnCheckEvts(uIndex);
}
/// 设置垂直导航条显示属性
/// \brief SetShowNaviPanel
/// \param bValue
///
void Lncf_IndexNavListv::SetShowNaviPanel(const bool bValue)
{
//自定义代码实现
}
至此带导航功能的列表封装完成,有关更多技术分享与交流请加QQ群:717743458。
下一篇 我们将分享如何绘制一个八卦罗盘,先给大家上个图给个悬念
敬请期待