gpt4 book ai didi

Qt:动态小部件信号和槽连接

转载 作者:行者123 更新时间:2023-12-04 18:13:24 33 4
gpt4 key购买 nike

在我的 Qt 应用程序中,我动态地创建了一些小部件。其中包括需要具有类似行为的 QToolButton。

以下是小部件的创建方式:

QMap<QString, QToolButton*> unselectButtonMap;
foreach(QString instance, ...) {
unselectButtonMap[instance] = new QToolButton;
myLayout->addWidget(unselectButtonMap[instance]);
QObject::connect(unselectButtonMap[instance],SIGNAL(clicked()),this,SLOT(unselectInstance()));
}

现在我想要 unselectInstence插槽以了解涉及哪个实例。

我首先考虑将实例名称作为参数提供给插槽,但插槽仅从信号中获取参数。这个想法是这样的:
QObject::connect(unselectButtonMap[instance],SIGNAL(clicked()),this,SLOT(unselectInstance(instance)));

关于如何做到这一点的任何其他想法?

注意:我使用的是 Qt4.8

编辑:基于 的答案,因为我需要实例名称而不是 QToolButton 本身,这就是我想出的
void MyWindow::unselectInstance() {
foreach(QString instance, unselectButtonMap.keys()) {
if(unselectButtonMap[instance] == QObject::sender()) {
//do stuff here...
}
}
}

指针比较似乎工作得很好。

重新编辑:并基于 用户1313312 的答案,我们将声明一个 QSignalMapper:
QSignalMapper *signalMapper = new QSignalMapper(this);
QObject::connect(signalMapper, SIGNAL(mapped(QString)), this, SLOT(unselectInstance(QString)));

然后将 QToolButton 连接到映射器
signalMapper->setMapping(unselectButtonMap[instance], instance);
QObject::connect(unselectButtonMap[instance],SIGNAL(clicked()),signalMapper,SLOT(map()));

并且插槽会简单得多:
void MyWindow::unselectinstance(QString instance) {
//do stuff here...
}

最佳答案

虽然使用 QObject::sender()很好,理想主义的方法是QSignalMapper

关于Qt:动态小部件信号和槽连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12173153/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com