我有一个QComboBox。我有两个用例。在一个用例中,组合框以编程方式更改为通过setCurrentIndex()获得新索引。在另一个用例中,用户单击并使用鼠标选择新的组合框选择。
这两个用例都会触发QComboBox :: currentIndexChanged(int)信号。这是我尝试移植的代码的主要问题。在旧框架(不是Qt)中,类似的回调机制仅在用户选择项目时才会被称为,而不是以编程方式更改的索引。
如何在Qt中模仿这种行为?
答案 0 :(得分:12)
您可以收听QComboBox::activated(int index)
和QComboBox::currentIndexChanged(int index)
信号。
如果用户更改了值,则会发出QComboBox::activated(int index)
和QComboBox::currentIndexChanged(int index)
信号。
如果值以编程方式更改,则只会发出QComboBox::currentIndexChanged(int index)
信号。所以基本上,前一个信号意味着"用户将索引更改为此值"。
示例:
int main(int argc, char* argv[]) {
QComboBox* combo = new QComboBox;
QObject::connect(combo, &QComboBox::activated, [&](int index) {
//User changed the value
});
}
我希望有所帮助!
答案 1 :(得分:9)
我记得有一种方法可以暂停Qt中的触发事件,因此您可以在更改currentIndex
之前和之后执行此操作。
啊,这是:
bool oldState = comboBox->blockSignals(true);
comboBox->setCurrentIndex(5);
comboBox->blockSignals(oldState);