因此,在我的程序中,我正在动态生成一些QCheckBox,该数字取决于查询的结果,并且我想在每个QCheckBox旁边有一个QLineEdit,该字符仅在选中QCheckBox时才会显示
所以我怎么链接它。

至今,
我只有这样的东西,而没有动态创建的所有内容的指针矢量(例如vector<vector<QObject*> > objets;),我将无法做到这一点:

sondage_page2::sondage_page2(QWidget *parent) :
QWidget(parent),
ui(new Ui::sondage_page2)
{
    // ...
    if(query.exec())
    {
        if(query.size()>0)
        {
            while(query.next())
            {
                QCheckBox* check=new QCheckBox(query.value("Marque").toString());
                ui->gridLayout->addWidget(check,row,0,Qt::AlignHCenter);

                vector<QObject*> temp;
                temp.push_back(check);
                objets.push_back(temp);

                QObject::connect(check,SIGNAL(stateChanged(int)),this,SLOT(checked(int)));
            }
            // ...
        }
    }
}

void sondage_page2::checked(int state)
{
    // très broken
    if(state==2) // checked
    {
        QLineEdit* edit=new QLineEdit();
        objets.at(objets.size()-1).push_back(edit);
        ui->gridLayout->addWidget(edit,row-1,1,Qt::AlignHCenter);
    }
    else
    {
       delete objets.at(row-1).at(1);
       objets.at(row-1).pop_back();
    }
}


编辑:基本上,我想在创建QCheckBox时在我的QCheckBox的同一行上显示(或创建)一个QLineEdit,并且使用QObject :: connect函数我只能将objets链接到同一函数,如何我有这个工作吗?

最佳答案

以下不是交钥匙解决方案。它只是显示了一种可能的方式。很有可能不是最好的解决方案。

您可以使用


  QMap


将您的QCheckBox与您的QLineEdit相关联。

在sondage_page2 :: sondage_page2中:

QCheckBox* check=new QCheckBox(query.value("Marque").toString());
...add to grid...
map[check] = nullptr;
connect(.....)


在sondage_page2 :: checked中:

QCheckBox *check = qobject_cast<QCheckBox *>(sender());
if(check){
  if(state == 2){
     QLineEdit* edit=new QLineEdit();
     map[check] = edit;
     ...enter edit in gridlayout...
  }else{
     ...remove from layout....
     map[check].take()->deleteLater() // delete the QLineEdit;
     edit->deleteLater();
  }
}else{
  // should not be possible... I think
}


据我了解,这些代码片段应该完全按照您上面概述的代码的意图进行。并非所有可能必要的健全性检查都已到位,例如地图上确实有支票吗?

关于c++ - qt创建动态对象并为同一信号分配不同的功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30002836/

10-13 03:54