当前位置:首页 > 编程笔记 > 正文
已解决

QComboBox的信号

来自网友在路上 176876提问 提问时间:2023-11-08 18:54:53阅读次数: 76

最佳答案 问答题库768位专家为你答疑解惑

QComboBox的最重要的信号activated和currentIndexChanged

两个信号的区别:

QComboBox::activated信号发射在用户打开选择了选项后,即便选项与当前选项一致,也会发射该信号
QComboBox::currentIndexChanged信号只在选项发生了变化的时候

这两个信号的发射顺序为,先QComboBox::currentIndexChanged
再QComboBox::activated

QComboBox* cbx=new QComboBox;
cbx->addItems(QStringList()<<"1"<<"2"<<"3");//先发出currentIndexChanged信号,再发出activated信号
connect(cbx,QOverload<int>::of(&QComboBox::currentIndexChanged),[]{qDebug()<<"QOverload<int>::of(&QComboBox::currentIndexChanged)";
});connect(cbx,QOverload<int>::of(&QComboBox::activated),[]{qDebug()<<"QOverload<int>::of(&QComboBox::activated)";
});

两个下拉框相互关联的问题

经常会有这样的需求:

将两个下拉框变化的信号相互关联上,使得任意一个下拉框被用户手动选择更改后,另外一个下拉框联动变化。

这里会有下拉框1改变导致下拉框2改变,下拉框2改变再导致下拉框1改变的死循环吗?

为什么不会?

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{QWidget* center=new QWidget;QHBoxLayout* hlayout=new QHBoxLayout(center);QComboBox* cbx=new QComboBox;hlayout->addWidget(cbx);QComboBox* cbx2=new QComboBox;hlayout->addWidget(cbx2);cbx->addItems(QStringList()<<"1"<<"2"<<"3");cbx2->addItems(QStringList()<<"a"<<"b"<<"c");//将两个下拉框变化的信号相互关联上//使得任意一个下拉框被用户手动选择更改后,另外一个下拉框联动变化connect(cbx,QOverload<int>::of(&QComboBox::currentIndexChanged),[=]{qDebug()<<"1:QOverload<int>::of(&QComboBox::currentIndexChanged)";cbx2->setCurrentIndex(cbx->currentIndex());});connect(cbx2,QOverload<int>::of(&QComboBox::currentIndexChanged),[=]{qDebug()<<"2:QOverload<int>::of(&QComboBox::currentIndexChanged)";cbx->setCurrentIndex(cbx2->currentIndex());});this->setCentralWidget(center);
}

不会造成死循环的原因在于两个下拉框的下拉项数码一致,而且每次关联后的序号也一致。

而且下拉框的setCurrentIndex()方法设置一个当前正处于的序号是不会发出currentIndexChanged信号的。所以不会存在循环发送信号的问题。

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"QComboBox的信号":http://eshow365.cn/6-35502-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!