Qt TableVIew上右键弹出菜单理解和demo思路

class FilterFrame : public QWidget
{
    Q_OBJECT
public:
    FilterFrame(QWidget *pParent = nullptr);
    ~FilterFrame();

protected:
    void initUI();
    void slotsConnect();
    void setAction(QAction *pAction);
    void initContextMenu();

    protected slots:
    void doRightMenuAction();
    void showContextMenu(const QPoint& pos);

protected:
    void resizeEvent(QResizeEvent *event);
private:
    QTableView* m_pErrorView;  
    QAction* m_pCollapseAllAction;
    QAction* m_pexpandAllAction;
    QMenu* m_pRightMenu;  //右键菜单
};

FilterFrame::FilterFrame(QWidget *pParent /*= nullptr*/)
{
    initUI();
    initContextMenu();
    slotsConnect();

}

FilterFrame::~FilterFrame()
{
}

void FilterFrame::initUI()
{
    QVBoxLayout* pVLayout = new QVBoxLayout();
    m_pErrorView = new QTableView(this);
    pVLayout->addWidget(m_pErrorView);
    setLayout(pVLayout);
}

void FilterFrame::slotsConnect()
{
    connect(m_pErrorView, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showContextMenu(const QPoint&)));
}

void FilterFrame::setAction(QAction *pAction)
{
    connect(pAction, SIGNAL(triggered()), this, SLOT(doRightMenuAction()));
    m_pRightMenu->addAction(pAction);
}

void FilterFrame::initContextMenu()
{
    m_pRightMenu = new QMenu(this);
    m_pCollapseAllAction = new QAction(QIcon(""),"Collapse All", this);  //设置命名
    setAction(m_pCollapseAllAction);
    m_pexpandAllAction = new QAction(QIcon(""),"Expand All", this);  //设置命令
    setAction(m_pexpandAllAction);
}

void FilterFrame::showContextMenu(const QPoint& pos)
{
    if (m_pRightMenu)
    {
        m_pRightMenu->popup(QCursor::pos());  //弹出菜单
    }
}

void FilterFrame::resizeEvent(QResizeEvent *event)
{
    //拉伸tableView时,跟随着拉伸的变化
    if (m_pErrorView)
    {
        int width = m_pErrorView->width();
        int scrollWidth = m_pErrorView->verticalScrollBar()->sizeHint().width();
        m_pErrorView->setColumnWidth(0, width - scrollWidth);
    }
    QWidget::resizeEvent(event);
}
void FilterFrame::doRightMenuAction()
{
    QAction* pAction = dynamic_cast<QAction*>(QObject::sender());

    if (pAction == m_pCollapseAllAction)
    {
        m_pErrorView->collapseAll();  //折叠
    }
    else if (pAction == m_pexpandAllAction)
    {
        m_pErrorView->expandAll(); //展开
    }
    else
        assert(false);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值