• QTableWidget如何在标题行的其他列添加控件


    前言:在表格的标题行的每列添加想添加的控件,不用继承重写

    用下图中我添加了QToolButton作为示例讲解,视频展示效果如下:

    效果如下:

    QTableWidget在表头行添加控件示例

    QTableWidget的一些创建还有简单的设置可以看这个链接,不懂的可以看下QTableWidget详细使用示例(里面有QMenu实现多级菜单的方法) 

     代码示例:

    1. 初始化:
    2. QHeaderView *m_horizontalHeader = twResTaskList->horizontalHeader();//twResTaskList这个是QTableWidget
    3. 或者:
    4. m_horizontalHeader = new QHeaderView(Qt::Horizontal,this);
    5. m_horizontalHeader=twResTaskList->horizontalHeader();

    然后就可以在表头行添加控件了:

    1. QAbstractItemModel *itemmode = m_horizontalHeader->model();
    2. //添加第一列的按钮
    3. int iPosX = m_horizontalHeader->sectionPosition(2);//获取第2列的位置,后面移动按钮的时候可以参考
    4. m_toolBtn = new QToolButton(m_horizontalHeader);//按钮的父类记得绑定表头哦!
    5. m_toolBtn->resize(20,25);//调整按钮大小
    6. m_toolBtn->setPopupMode(QToolButton::InstantPopup);//设置Qmenu在QToolButton上的出现方式
    7. m_toolBtn->setCursor(Qt::ArrowCursor);
    8. m_menuResName = new QMenu();
    9. m_toolBtn->setMenu(m_menuResName);
    10. m_horizontalHeader->setIndexWidget(itemmode->index(0,1),m_toolBtn);//这句感觉没啥作用,我去掉了效果也是一样的
    11. m_iBtnIndex= iPosX-25;
    12. m_toolBtn->move(m_iBtnIndex,2);//重点这句,根据自己想要的效果,把按钮移到对应的位置
    13. //添加第3列的按钮,步骤如上
    14. m_toolBtnState = new QToolButton(m_horizontalHeader);
    15. mvw=m_horizontalHeader->sectionPosition(3);
    16. m_toolBtnState->resize(20,25);
    17. m_toolBtnState->setStyleSheet(sBtnStyle);
    18. m_toolBtnState->setPopupMode(QToolButton::InstantPopup);
    19. m_toolBtnState->setCursor(Qt::ArrowCursor);
    20. m_menuResState = new QMenu();
    21. //下面这这种方法是QAction快速绑定槽函数的方法,很好用哦
    22. m_menuResState->addAction("所有类型",this,SLOT(slotStateMenuClick()));
    23. m_menuResState->addAction("未完成",this,SLOT(slotStateMenuClick()));
    24. m_menuResState->addAction("已完成",this,SLOT(slotStateMenuClick()));
    25. m_toolBtnState->setMenu(m_menuResState);
    26. m_horizontalHeader->setIndexWidget(itemmode->index(0,3),m_toolBtnState);
    27. m_iCheckBoxIndex= iPosX+115-25;//位置可以根据自己想要的效果调整
    28. m_toolBtnState->move(m_iCheckBoxIndex,2);
    29. //记得绑定表头大小改变时发出的信号,方便调整按钮对应的位置,不然看起来很奇怪,移动之后
    30. connect(m_horizontalHeader,SIGNAL(sectionResized(int,int,int)),this,SLOT(slotModelIndexResize(int,int,int)));

    槽函数:这样即使表头动来动去的,我们的控件也会跟着移动了(仅供参考)

    其中logicalIndex是指如下图拉动竖线大小改变的那一列

     这样就可以实现上面的效果了

  • 相关阅读:
    控制您的音乐、视频等媒体内容
    三角形个数
    C语言--typedef的使用
    C#开发的OpenRA游戏之步兵射击(2)
    第二站:分支与循环(第二幕)
    【SVN】
    怎么使用LightPicture开源搭建图片管理系统并远程访问?【搭建私人图床】
    交叉编译 笔记
    React入门到精通学习路线
    谈笑风声的秘密
  • 原文地址:https://blog.csdn.net/ligare/article/details/134016954