本文主要是介绍QComboBox的信号,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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信号的。所以不会存在循环发送信号的问题。
这篇关于QComboBox的信号的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!