作业
代码
Widget.h
class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:// 槽函数void on_listWidget_itemDoubleClicked(QListWidgetItem *item);private:Ui::Widget *ui;
};
#endif
Widget.cpp
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}// 槽函数
void Widget::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{int page = ui->listWidget->row(item);ui->stackedWidget->setCurrentIndex(page); //跳转相应页面
}
效果
题目
代码
继承QListWidget 重写 其菜单事件
(可以不继承,在Widget中使用菜单事件)
MyListWidget.h
class MyQListWidget : public QListWidget
{Q_OBJECT
public:MyQListWidget(QWidget* parent = nullptr);//菜单事件virtual void contextMenuEvent(QContextMenuEvent *event) override;
public slots:void on_action_triggered();private:QMenu* menu;QListWidgetItem* item_clicked;
};#endif
MyListWidget.cpp
MyQListWidget::MyQListWidget(QWidget *parent):QListWidget(parent)
{menu = new QMenu(this); //创建menuQAction* del_action =menu->addAction("删除"); //创建actionQObject::connect(del_action,&QAction::triggered,this,&MyQListWidget::on_action_triggered);
}void MyQListWidget::contextMenuEvent(QContextMenuEvent *event)
{item_clicked=itemAt(event->pos()); //判断触发菜单事件时,鼠标位置是否有itemif(item_clicked != nullptr) //鼠标位置有item{qDebug() << "点中了item";menu->exec(event->globalPos()); //显示菜单}
}void MyQListWidget::on_action_triggered()
{qDebug() << "执行删除操作";int row = this->row(item_clicked); //被点击的item在listWidget中是第几个this->takeItem(row); //删除该item
}
效果
/*************************************************分割线*************************************************/
作业
思路
继承listWidget,重写其“鼠标点击”事件,创建menu
代码
重载后的MylistWidget.h
class MyQListWidget : public QListWidget
{Q_OBJECT
public:MyQListWidget(QWidget* parent = nullptr);virtual void mousePressEvent(QMouseEvent *event) override;
private:QMenu* menu;
};#endif
MylistWidget.cpp
MyQListWidget::MyQListWidget(QWidget *parent):QListWidget(parent)
{menu = new QMenu(this); //创建menuQAction* del_action =menu->addAction("删除"); //创建actionmenu->triggered(del_action); //添加监视//设定触发信号所连接的槽函数QObject::connect(del_action,&QAction::triggered,this,&MyQListWidget::on_action_triggered);
}void MyQListWidget::mousePressEvent(QMouseEvent *event)
{//运行到此说明鼠标按下//如果"鼠标右键"按下if (event->button() == Qt::RightButton){//判断"鼠标右键"位置是否有itemif (itemAt(event->pos()) != nullptr){qDebug() << "鼠标右键单击一次";menu->exec(event->globalPos()); //显示 示例中QMouseEventmenu_open_flag=1;}}
}void MyQListWidget::on_action_triggered()
{qDebug() << "执行删除操作";
}
效果
右键点中item , 弹出menu
点中,执行删除操作
未被点中,无反应