前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >QComboBox的一个小技巧

QComboBox的一个小技巧

作者头像
Qt君
发布2020-07-14 16:01:47
1K0
发布2020-07-14 16:01:47
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

  下列代码是QComboBox的简单应用,相信大部分人都会这样写。

代码语言:javascript
复制
QComboBox *m_comboBox;
m_comboBox = new QComboBox(this);
m_comboBox->addItem("16*16");
m_comboBox->addItem("32*32");
m_comboBox->addItem("64*64");
m_comboBox->addItem("128*128");

connect(m_comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onCurrentIndexChanged(int)));
connect(m_comboBox, SIGNAL(currentTextChanged(const QString &)), this, SLOT(onCurrentTextChanged(const QString &)));

/* 槽函数1 */
void onCurrentIndexChanged(int index)
{
    /* 直接使用index判断在项数动态增加时会容易出错。 */
 if (index == 0) {
     qDebug() << "0: Do something." << QSize(16, 16);
 }
 else if (index == 1) {
     qDebug() << "1: Do something." << QSize(32, 32);
 }
}

/* 槽函数2 */
void onCurrentTextChanged(const QString &text)
{
    /* 使用字符串判断可能会出现写错字符串导致一直判断不成功的问题。 */
 if (text == "16*16") {
     qDebug() << "0: Do something." << QSize(16, 16);
 }
 else if (text == "32*32") {
     qDebug() << "1: Do something." << QSize(32, 32);
 }
}

  上面代码的实现维护性不好。

  • 我们使用index作为判断时,当我在64*64128*128之间添加一项时会导致下标改变,如不及时修改代码会出现程序意想不到的bug。
  • 而使用字符判断虽然可以避免上面问题,但会出现另一个问题是,当字符串写错了导致判断不对,一样会导致程序bug。

  那么我们该如何避免上面的这些问题呢?答案如下,看代码:

代码语言:javascript
复制
QComboBox *m_comboBox;
m_comboBox = new QComboBox(this);
m_comboBox->addItem("16*16",   QSize(16, 16));
m_comboBox->addItem("32*32",   QSize(32, 32));
m_comboBox->addItem("64*64",   QSize(64, 64));
m_comboBox->addItem("128*128", QSize(128, 128));
m_comboBox->addItem("256*256", QSize(256, 256));
m_comboBox->addItem("512*512", QSize(512, 512));

connect(m_comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onCurrentIndexChanged(int)));

void onCurrentIndexChanged(int index)
{
    /* 通过实现addItem绑定的数据通过index获取回来,方便易用,维护性高。 */
 QSize size = m_comboBox->itemData(index).toSize();
 qDebug() << "Do something." << size;
}

  利用addItem接口的userData参数实现,而使用itemData接口实现数据的获取。

代码语言:javascript
复制
void QComboBox::addItem(const QString &text, const QVariant &userData = QVariant())
代码语言:javascript
复制
QVariant QComboBox::itemData(int index, int role = Qt::UserRole) const
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档