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