我有一个非常具体的问题,所以我会尽量说清楚。
我有一个包含QTableWidget
的QTabWidget
,我的QTableWidget
的每一行都是通过读取文件动态创建的。
如您所见,当我创建一行时,我在末尾添加了一个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/