继承自 QListWidget 及其 SLOT
Inheriting from a QListWidget and its SLOT
这里是继承自QListWidget
的class:
typedef void(*fnc) (QListWidgetItem* item);
class CustomListWidget : public QListWidget
{
public:
CustomListWidget();
void AddItemList(std::vector<std::string>* list);
void ConnectToOnClickSlot(fnc func);
private:
fnc onClick;
void InvokeOnclickMethod(QListWidgetItem* item);
};
对应的.cpp文件(部分):
CustomListWidget::CustomListWidget()
{
QObject::connect(this, SIGNAL(itemClicked(QListWidgetItem*)),
this, SLOT(InvokeOnclickMethod(QListWidgetItem*)));
}
void CustomListWidget::ConnectToOnClickSlot(fnc func)
{
onClick = func;
}
void CustomListWidget::InvokeOnclickMethod(QListWidgetItem* item)
{
onClick(item);
}
我原以为 InvokeOnclickMethod
在单击项目时会被调用,但没有任何反应。可能是什么问题?
主要部分:
auto listView = new CustomListWidget();
listView->ConnectToOnClickSlot(ItemClicked);
void ItemClicked(QListWidgetItem* item)
{
//Do something...
}
您需要为要使用 signals/slots 的 class 添加 Q_OBJECT
宏。 IIRC,"old" 连接还需要在 <accessibility> slots:
部分中声明插槽。
顺便说一句,人们已经使用 "new" signal/slot connection syntax 大约三年了。
这里是继承自QListWidget
的class:
typedef void(*fnc) (QListWidgetItem* item);
class CustomListWidget : public QListWidget
{
public:
CustomListWidget();
void AddItemList(std::vector<std::string>* list);
void ConnectToOnClickSlot(fnc func);
private:
fnc onClick;
void InvokeOnclickMethod(QListWidgetItem* item);
};
对应的.cpp文件(部分):
CustomListWidget::CustomListWidget()
{
QObject::connect(this, SIGNAL(itemClicked(QListWidgetItem*)),
this, SLOT(InvokeOnclickMethod(QListWidgetItem*)));
}
void CustomListWidget::ConnectToOnClickSlot(fnc func)
{
onClick = func;
}
void CustomListWidget::InvokeOnclickMethod(QListWidgetItem* item)
{
onClick(item);
}
我原以为 InvokeOnclickMethod
在单击项目时会被调用,但没有任何反应。可能是什么问题?
主要部分:
auto listView = new CustomListWidget();
listView->ConnectToOnClickSlot(ItemClicked);
void ItemClicked(QListWidgetItem* item)
{
//Do something...
}
您需要为要使用 signals/slots 的 class 添加 Q_OBJECT
宏。 IIRC,"old" 连接还需要在 <accessibility> slots:
部分中声明插槽。
顺便说一句,人们已经使用 "new" signal/slot connection syntax 大约三年了。