qt - 如何将 QAction 添加到 QListWidget
问题描述
我有以下代码:
roslaserscandoialog.h
public:
explicit ROSLaserScanDialog(QWidget *parent = nullptr);
~ROSLaserScanDialog();
QListWidgetItem *createItemFromAction(const QAction* action);
private slots:
void on_listWidget_itemClicked(QListWidgetItem *item);
private:
Ui::ROSLaserScanDialog *ui;
QAction *mAddMsgs;
QAction *mDeleteMsgs;
roslaserscandoialog.cpp
ROSLaserScanDialog::ROSLaserScanDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::ROSLaserScanDialog)
{
ui->setupUi(this);
connect(ui->listWidget,SIGNAL(on_listWidget_itemClicked(QListWidgetItem*)),this,SLOT(createItemFromAction(QListWidgetItem*)));
}
QListWidgetItem *ROSLaserScanDialog::createItemFromAction(const QAction *action)
{
Q_ASSERT( action );
QListWidgetItem *mAddMsgs = new QListWidgetItem();
mAddMsgs->setText( action->text() );
mAddMsgs->setToolTip( action->toolTip() );
mAddMsgs->setIcon( action->icon() );
// ...
return mAddMsgs;
}
void ROSLaserScanDialog::on_listWidget_itemClicked(QListWidgetItem *item)
{
mAddMsgs = new QAction(QIcon(":ros.png"), tr("Add New Message"), this);
mDeleteMsgs = new QAction(QIcon(":remove_item.png"), tr("Remove Message"), this);
}
到目前为止我做了什么:
我遇到了这篇文章和这篇文章。非常有用,因为我以非常相似的方式设置了我的项目,但是当我尝试单击QListWidget
.
我知道,为了触发动作,我必须itemClicked
像在上面提供的代码中那样调用插槽。在官方文档中,我试图应用建议的内容,但我不知道为什么什么也没发生。
请指出解决此问题的正确方向。
解决方案
查看控制台输出,应该有关于连接失败的警告。如果您查看代码,原因应该很明显。考虑
SLOT(createItemFromAction(QListWidgetItem*))
与您甚至不是插槽的方法相比
QListWidgetItem *createItemFromAction(const QAction* action);
看到不同?
然后你有这个插槽:
void on_listWidget_itemClicked(QListWidgetItem *item);
您试图将其用作信号
SIGNAL(on_listWidget_itemClicked(QListWidgetItem*))
那显然行不通。
当一个项目被点击时你想要发生什么有点不清楚,但也许你应该createItemFromAction
直接从on_listWidget_itemClicked
.
此外,添加调试打印或使用断点来验证on_listWidget_itemClicked
单击项目时是否实际调用了 。如果没有,那么您缺少连接列表视图中的相关信号,即。ui->setupUi(this);
没有那个连接(换句话说,您没有在 GUI 设计器中进行连接)。
推荐阅读
- python - 如何在 python 中执行程序并允许用户与之交互?
- android - 如何在android中为日期对象设置小时、分钟、秒
- c - 编译RAID控制器设备驱动(linux内核模块)
- javascript - 为什么函数 getSafestCountriesNames() 在我调用它时返回 promise{pending} 并且当我使用 async/await 时它返回未定义?
- django - Django模板渲染缓慢
- reactjs - 如何从 Create React App 为我的主页生成静态 HTML?
- java - Apache Ignite - HashMap 的 SQL 支持?
- c++ - 创建最多 10^12 的数组
- javascript - 在 JS 数组中创建索引
- node.js - Node.js Mongodb GraphQL - 突变和查询