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

it2023-02-25  79

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); }

最新回复(0)