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

标签 c++ qt signals slot qcheckbox

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

我有一个包含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/

相关文章:

c++ - 使用 Visual Studio 15 使用 C++ 进入 Ring 0

c++ - 为每种参数类型重新定义相同模式的函数

qt - 在 QML 中截取特定项目的屏幕截图的方法是什么?

c++ - 在信号处理程序中捕获 C++ 未处理的异常并恢复应用程序

c++ - 具有获取和释放语义的互锁操作(多平台)

qt - 在 Qt 中,设置环境变量的不同方法有哪些,优缺点是什么?

javascript - 如何从一个 QtScript .js 文件调用另一个 QtScript .js 文件

django - 无法编辑模型字段/Django 信号来更新图像喜欢不起作用/

c++ - 如何将 SIGFPE 转换为 C++ 异常

c++ - 为什么复制和 move 构造函数一起调用?