因此,在我的程序中,我正在动态生成一些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/