问题描述:
程序中经常使用下拉框控件QComboBox,我们知道在Qt中每当用户重新选择了一个项的时候QComboBox会产生currentIndexChanged信号。在有必要的情况下,在程序中需要清空QComboBox并重置项,这时候同样会产生这个信号,并且会产生2次。一次在清空的各项的时候,一次在重置各项的时候。
例子:
TestDialog.h文件:
#ifndef TESTDIALOG_H
#define TESTDIALOG_H
#include <QObject>
#include <QDialog>
#include <QPushButton>
#include <QComboBox>
class TestDialog : public QDialog
{
Q_OBJECT
public:
TestDialog(QWidget *parent = 0);
public slots:
void comboBoxValueChanged();
void changeComboBoxValue();
private:
QPushButton *button;
QComboBox *comboBox;
};
#endif // TESTDIALOG_H
TestDialog.cpp文件:
#include "TestDialog.h"
#include <QtGui>
TestDialog::TestDialog(QWidget *parent) : QDialog(parent)
{
setWindowTitle(tr("一个简单的例子"));
comboBox = new QComboBox;
comboBox->addItems(QStringList()<<tr("床前明月光")<<tr("疑是地上霜")
<<tr("举头望明月")<<tr("低头思故乡"));
button = new QPushButton(tr("改变下拉框内容"));
QHBoxLayout *layout = new QHBoxLayout;
layout->addStretch();
layout->addWidget(button);
QVBoxLayout *mainlayout = new QVBoxLayout;
mainlayout->addWidget(comboBox);
mainlayout->addLayout(layout);
this->setLayout(mainlayout);
connect(button, SIGNAL(released()), this, SLOT(changeComboBoxValue()));
connect(comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(comboBoxValueChanged()));
}
void TestDialog::changeComboBoxValue()
{
comboBox->clear();
qDebug()<<"======1======";
comboBox->addItems(QStringList()<<tr("竹外桃花三两枝")<<tr("春江水暖鸭先知")
<<tr("蒌蒿满地芦芽短")<<tr("正是河豚欲上时"));
qDebug()<<"======2======";
return ;
}
void TestDialog::comboBoxValueChanged()
{
qDebug()<<tr("current index changed...");
}
main.cpp文件:
#include <QtGui/QApplication>
#include <QTextCodec>
#include "TestDialog.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
/*设置编码格式*/
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
TestDialog *dialog = new TestDialog;
dialog->show();
return app.exec();
}
运行结果:
点击了按钮之后:
应用程序输出:
"current index changed..."
======1======
"current index changed..."
======2======
其他情况:
1.如果QComboBox里添加项,则不产生currentIndexChanged信号。
2.删除QComboBox某一项,若当前项在该项之前,则不产生信号;若当前项要删除或当前项在删除项之后,则会产生一次信号。