问题描述:
程序中经常使用下拉框控件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某一项,若当前项在该项之前,则不产生信号;若当前项要删除或当前项在删除项之后,则会产生一次信号。