gpt4 book ai didi

c++ - 使用 Qt 修改任何复选框状态时执行操作

转载 作者:搜寻专家 更新时间:2023-10-31 01:35:17 25 4
gpt4 key购买 nike

在我的程序中,我通过这种方式用很多复选框填充我的界面:

void VGCCC::addMaterialToUI(QDomNodeList _materialNodeList, QWidget* _areaWidget, QLayout* _layout, QWidget* _layoutWidget, int _maTable)
{
for(int i=0; i< _materialNodeList.count();i++)
{
QDomElement materialElement = _materialNodeList.at(i).toElement();
QString elementFile = materialElement.attribute("file");
QString elementId = materialElement.attribute("id");
QString elementLabel = elementId;
elementLabel += " - ";
elementLabel += materialElement.attribute("label");
QCheckBox* checkbox = new QCheckBox(elementLabel);
_layout->addWidget(checkbox);
_layoutWidget->adjustSize();
_areaWidget->setMinimumHeight(_layoutWidget->height());
_areaWidget->setMinimumWidth(_layoutWidget->width());

configuration c;
c.path = (m_igmPath+elementFile).toStdString();
c.id = elementId.toInt();
c.name = elementLabel.toStdString();
if(_maTable==0)
{
m_materialSectionMap[checkbox] = c;
}
else
{
m_materialPostMap[checkbox] = c;
}
}
}

我想知道如何检索这些“抽象”复选框。更确切地说,如果选中其中一个复选框,我想像这样调用另一个函数:

    connect(anyCheckbox,SIGNAL(stateChanged(anyCheckbox)), this, SLOT(doSomethingFunctionIfCheckboxIsChecked()));

困难在于,在我的 UI 中,这些复选框不存在,所以我无法将它们连接到我的函数。我该如何解决?

最佳答案

例如,您可以将指向您的复选框对象的指针收集到一个列表中,以便以后可以访问或“检索”它们。

您可以将每个复选框的 stateChanged 信号连接到同一个插槽,然后在任何复选框的状态发生更改时调用该插槽。如果您需要知道哪个特定复选框有问题,您可以在插槽中将 sender() 转换为复选框。另一种选择是使用 QSignalMapper .

在你的类声明中:

private slots:
void checkboxStateChanged(int state)

private:
QList<QCheckBox*> m_checkboxes;

在你的类定义中:

void VGCCC::addMaterialToUI(QDomNodeList _materialNodeList, QWidget* _areaWidget, QLayout* _layout, QWidget* _layoutWidget, int _maTable)
{
...
QCheckBox* checkbox = new QCheckBox(elementLabel);
m_checkboxes.append(checkbox);
connect(checkbox, SIGNAL(stateChanged(int)), this, SLOT(checkboxStateChanged(int)));
...
}

void VGCCC::checkboxStateChanged(int state)
{
// Here your can e.g. call doSomethingFunctionIfCheckboxIsChecked()

QCheckBox* checkbox = qobject_cast<QCheckBox*>(sender());
if (checkbox)
{
// checkbox points to the object whose state changed
}

}

关于c++ - 使用 Qt 修改任何复选框状态时执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37668186/

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