重置QComboBox项的时候产生currentIndexChanged信号

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

 

 

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值