Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QComboBox获取变量时;currentIndexChanged(int)";发出_C++_Qt - Fatal编程技术网

C++ QComboBox获取变量时;currentIndexChanged(int)";发出

C++ QComboBox获取变量时;currentIndexChanged(int)";发出,c++,qt,C++,Qt,我很难找到这方面的文档或示例 有人能具体地告诉我如何在QComboBox中访问当前所选索引的QVariant吗 QComboBox * combo = new QComboBox(); combo->addItem("Bla1", QVariant(1)); combo->addItem("Bla2", QVariant(2)); combo->addItem("Bla3", QVariant(3)); combo->addItem("Bla4", QVaria

我很难找到这方面的文档或示例

有人能具体地告诉我如何在QComboBox中访问当前所选索引的QVariant吗

 QComboBox * combo = new QComboBox();
 combo->addItem("Bla1", QVariant(1));
 combo->addItem("Bla2", QVariant(2));
 combo->addItem("Bla3", QVariant(3));
 combo->addItem("Bla4", QVariant(4));
 connect(combo, SIGNAL(currentIndexChanged(int)), this, slot(HANDLEITMAN(int))
当然还有其他来源

 void TheCooler::HANDLEITMAN(int index)
 {
      //What do I do with index?
      //sender()?
 }

首先,使
combo
成为
cooler
的成员,或者将
HANDLEITMAN
放入一个拥有
combo
作为成员的类中。除非Cooler::HANDLEITMAN可以使用它,否则您就无法获取数据,而这是一种合乎逻辑的方法。那就是

 void TheCooler::HANDLEITMAN(int index)
 {
      QVariant data = combo->itemData(index);
 }

首先,使
combo
成为
cooler
的成员,或者将
HANDLEITMAN
放入一个拥有
combo
作为成员的类中。除非Cooler::HANDLEITMAN可以使用它,否则您就无法获取数据,而这是一种合乎逻辑的方法。那就是

 void TheCooler::HANDLEITMAN(int index)
 {
      QVariant data = combo->itemData(index);
 }

如果您不想让combo成为类
TheCooler
的成员,可以使用
sender()
函数返回指向发送触发信号的
QObject
的指针(在本例中为
currentIndexChanged(int)

void TheCooler::HANDLEITMAN(int索引)
{
QComboBox*combo=qobject_cast(sender());
如果(组合==0)
return;//发生了错误
QVariant data=combo->itemData(索引);
}

如果
combo
为空,则您可能试图自己调用插槽,或者您已将其与非
QComboBox
的类发出的信号连接。如果您不想使combo成为类
TheCooler
的成员,则可以使用
发送方()
函数,返回指向发送触发信号的
QObject
的指针(在本例中为
currentIndexChanged(int)

void TheCooler::HANDLEITMAN(int索引)
{
QComboBox*combo=qobject_cast(sender());
如果(组合==0)
return;//发生了错误
QVariant data=combo->itemData(索引);
}

如果
combo
为空,那么您可能试图自己调用插槽,或者您将其与一个类发出的信号连接,该类不是
QComboBox

一个公平的选择,但请注意,当使用
sender()
时,Qt会给出建议。呵呵,我不记得关于破坏面向对象设计的警告。但无论如何,我真的很喜欢这种方法:在我的大多数与Qt相关的开发中,能够辨别哪个对象触发了插槽是非常重要的。在我的例子中,发送发送器作为信号的一部分会产生一种比将发送器与插槽所有者一起存储更优雅、更灵活、更容易理解的设计。他们的警告对我来说似乎不合适。(无论如何,如果QComboBox能够明智地向新选择的QVariant数据发送某种引用或副本,作为其选择更改信号的一部分,这一切都无关紧要。我只对模拟缺失的行为感兴趣;似乎提问者处于相同的位置。)一个公平的选择,但是请注意,Qt建议在使用
sender()
.Ho时,我不记得关于破坏面向对象设计的警告。但无论如何,我真的很喜欢这种方法:在我的大多数与Qt相关的开发中,能够辨别哪个对象触发了插槽是非常重要的。在我的例子中,发送发送器作为信号的一部分会产生一种比将发送器与插槽所有者一起存储更优雅、更灵活、更容易理解的设计。他们的警告对我来说似乎不合适。(无论如何,如果QComboBox能够明智地向新选择的QVariant数据发送某种引用或副本,作为其选择更改信号的一部分,这一切都无关紧要。我只对模拟缺失的行为感兴趣;似乎提问者处于相同的位置。)我认为这可能是最好的方法,尽管我在处理结构化环境(布局->小部件->布局->等等)时非常反对成员变量,但我认为这可能是最好的方法,即使我在处理结构化环境(布局->小部件->布局->等等)时非常反对成员变量