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