QT作业day4
- 开源代码
- 2025-09-10 20:00:02

作业
代码
Widget.h
class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); private slots: // 槽函数 void on_listWidget_itemDoubleClicked(QListWidgetItem *item); private: Ui::Widget *ui; }; #endifWidget.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); //跳转相应页面 }效果
作业
思路
继承listWidget,重写其“鼠标点击”事件,创建menu
代码
重载后的MylistWidget.h
class MyQListWidget : public QListWidget { Q_OBJECT public: MyQListWidget(QWidget* parent = nullptr); virtual void mousePressEvent(QMouseEvent *event) override; private: QMenu* menu; }; #endifMylistWidget.cpp
MyQListWidget::MyQListWidget(QWidget *parent) :QListWidget(parent) { menu = new QMenu(this); //创建menu QAction* del_action =menu->addAction("删除"); //创建action menu->triggered(del_action); //添加监视 //设定触发信号所连接的槽函数 QObject::connect(del_action,&QAction::triggered,this,&MyQListWidget::on_action_triggered); } void MyQListWidget::mousePressEvent(QMouseEvent *event) { //运行到此说明鼠标按下 //如果"鼠标右键"按下 if (event->button() == Qt::RightButton) { //判断"鼠标右键"位置是否有item if (itemAt(event->pos()) != nullptr) { qDebug() << "鼠标右键单击一次"; menu->exec(event->globalPos()); //显示 示例中QMouseEvent menu_open_flag=1; } } } void MyQListWidget::on_action_triggered() { qDebug() << "执行删除操作"; }效果
右键点中item , 弹出menu
点中,执行删除操作
未被点中,无反应