gpt4 book ai didi

c++ - 将信号和插槽关联到动态创建的 qcheckbox

转载 作者:行者123 更新时间:2023-11-30 04:03:43 25 4
gpt4 key购买 nike

我有一个非常具体的问题,所以我会尽量说清楚。

我有一个包含QTableWidgetQTabWidget,我的QTableWidget的每一行都是通过读取文件动态创建的。

myTab

如您所见,当我创建一行时,我在末尾添加了一个qCheckBox。我现在的目标是,当我点击 qCheckBox(并删除当我取消选中 qCheckBox 时这一行)。

所以每次我动态创建一条线时,我都会尝试将信号关联到我的 qCheckBox :

QObject::connect(pCheckBox, SIGNAL(clicked()),  this, SLOT(cliqueCheckBox(monTab,ligne, pCheckBox)));

但它不会工作,我有错误:

QObject::connect: No such slot supervision::cliqueCheckBox(monTab,ligne, pCheckBox)

但是这个插槽存在,我在我的头文件和我的 cpp 中这样声明它:

void supervision::cliqueCheckBox(QTableWidget *monTab, int ligne, QCheckBox *pCheckBox)

我解决这个问题的方法好吗?如果是,如何将信号正确关联到插槽,如果不是,如何进行?

谢谢。

[编辑]:这是我创建 qCheckBox 并动态关联它的函数的代码:

void supervision::ajouterCheckBox(QTableWidget *monTab, int ligne){
// Creation de la check box
QWidget *pWidget = new QWidget(); //Creation du widget contenant la checkbox
QCheckBox *pCheckBox = new QCheckBox(); // Creation de la checkbox
QHBoxLayout *pLayout = new QHBoxLayout(pWidget); // Layout pour centrer ma checkbox
pLayout->addWidget(pCheckBox); // Ajout de la check box au layout
pLayout->setAlignment(Qt::AlignCenter); //Alignement
pLayout->setContentsMargins(0,0,0,0);//Supression des bordure
pWidget->setLayout(pLayout);//Mise en place du layout dans le widget
monTab->setCellWidget(ligne,5,pWidget);//Mise en place du widget contenant la checkbox dans ça cellule

//Mise en place de la connection
QObject::connect(pCheckBox, SIGNAL(clicked()), this, SLOT(cliqueCheckBox(monTab,ligne, pCheckBox)));
}

最佳答案

您正在将 SIGNAL(clicked()) 连接到 SLOT(cliqueCheckBox(monTab,ligne, pCheckBox),这是无效的。信号和槽的参数应该匹配. 此处您无需为目标插槽提供任何参数。

正确的形式是:

QObject::connect(pCheckBox, SIGNAL(clicked()),  this, SLOT(clickedCheckBox()));

并且 clickedCheckBox 插槽应该可以访问您的小部件的指针:

void myClass::clickedCheckBox()
{
...
}

关于c++ - 将信号和插槽关联到动态创建的 qcheckbox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24257789/

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