【问题标题】:How can I get the selected VALUE out of a QCombobox?如何从 QCombobox 中获取选定的 VALUE?
【发布时间】:2011-01-04 15:24:34
【问题描述】:

在 Qt 中,我可以通过使用 combobox->currentText() 方法。 如何获得 selected value

我寻求帮助,但找不到我希望找到的方法 currentData()。我只能找到combobox->currentIndex()

除了combobox->itemData(combobox->currentIndex()),还有更聪明的方法吗?

更新:从 Qt 5 开始不再需要。添加了 currentData() 方法 http://doc.qt.io/qt-5/qcombobox.html#currentData-prop

【问题讨论】:

    标签: qt qcombobox


    【解决方案1】:

    这个问题很老,但也许有人需要一个实际的答案。

    在 QGIS 3.4 中,您可以使用 currentData() 方法从 QComboBox 获取值。

    示例:comboBox.currentData()

    链接:https://doc.qt.io/qt-5/qcombobox.html#currentData-prop

    【讨论】:

      【解决方案2】:

      我做了这个

      QDir path("/home/user/");
      QStringList _dirs = path.entryList(QDir::Dirs);
      std::cout << "_dirs_count = " << _dirs.count() << std::endl;
      ui->cmbbox->addItem(Files);
      ui->cmbbox->show();
      

      您将看到名为 _dirs 的 QStringList 的结构类似于一个数组,您可以通过索引访问其成员,直到 _dirs.count() 返回的值

      【讨论】:

        【解决方案3】:

        如果您正在开发 QGIS 插件,那么只需

        self.dlg.cbo_load_net.currentIndex()
        

        【讨论】:

        • 不,这也没有选择VALUE。选中的TEXT、选中的VALUE和选中的INDEX是完全不同的东西。只有巧合,index 可能等于value。如果人们想使用组合,他们需要学习和理解其中的区别。据我所知,在 Qt 中,使用数据模型时 VALUE 有点扩展。
        【解决方案4】:

        我知道我已经很晚了,但对于那些仍然有这个问题的人来说,它可以很容易地解决。 我使用 Qt 5.3,它工作正常。无需创建函数或所有这些。

        int valueComboBox;
        valueComboBox = comboBox->currentIndex();
        

        它有效! 希望对您有所帮助!

        【讨论】:

        • 索引和值不一样
        【解决方案5】:

        我很惊讶没有激活信号并且有同样的问题。我通过制作 QComboBox 的子类来解决它。我认为最好避免直接访问对象并调用其函数,因为这意味着更紧密的耦合并且违背了 Qt 的理念。所以这是我制作的适合我的课程。

        class SmartComboBox : public QComboBox {
        
            Q_OBJECT
        
        private slots:
        
            void triggerVariantActivated(int index);
        
        public:
        
            SmartComboBox(QWidget *parent);
        
        signals:
        
            void activated(const QVariant &);
        
        };
        

        以及实现

        void SmartComboBox::triggerVariantActivated(int index)
        {
            activated(itemData(index));
        }
        
        SmartComboBox::SmartComboBox(QWidget *parent)
        :QComboBox(parent)
        {
            connect(this, SIGNAL(activated(int)), this, SLOT(triggerVariantActivated(int)));
        }
        

        【讨论】:

          【解决方案6】:

          我有同样的问题

          我已经解决了

          value = self.comboBox.currentText()
          print value
          

          【讨论】:

          • 这是标签文本,不是值。
          【解决方案7】:

          自从提出这个问题以来,已经添加了成员​​函数 QComboBox::currentData,请参阅commit

          【讨论】:

          【解决方案8】:

          我遇到了问题,

          QString str = m_UI->myComboBox->currentText();
          

          解决了这个问题。

          【讨论】:

          • 同样,正如其他人在上面所写的,这是选定的文本,而不是选定的值。不同的东西。
          【解决方案9】:

          这是我在 QT 4.7 中的 OK 代码:

           //add combobox list 
              QString val;
             ui->startPage->clear();
              val = "http://www.work4blue.com";
              ui->startPage->addItem(tr("Navigation page"),QVariant::fromValue(val));
              val = "https://www.google.com";
              ui->startPage->addItem("www.google.com",QVariant::fromValue(val));
              val = "www.twitter.com";
              ui->startPage->addItem("www.twitter.com",QVariant::fromValue(val));
              val = "https://www.youtube.com";
              ui->startPage->addItem("www.youtube.com",QVariant::fromValue(val));
          
             // get current value
              qDebug() << "current value"<< 
                 ui->startPage->itemData(ui->startPage->currentIndex()).toString();
          

          【讨论】:

            【解决方案10】:

            这个可以得到当前索引的文本:

            QString cb = cbChoice ->currentText();
            

            【讨论】:

            • 这有什么帮助? currentText 是 OP 已经知道的...
            【解决方案11】:

            我确认最简单的方法是这样做:

            uiAnalyseAssets::AnalyseAssets(QWidget *parent)
            : QWidget(parent)
            {
            ui.comboBox->addItem("text1");
            ui.comboBox->addItem("text2");
            
            ...
            }
            
            void mainFunction::yourFunction( int index )
            {
             int value = ui.comboBox->currentText();
            }
            

            【讨论】:

            • 等一下——QComboBox::currentText() 不返回QString 吗?你如何找到一个明智的int?你想用你的参数int index做什么?
            【解决方案12】:

            如果要获取QComboBox的当前数据,似乎需要combobox-&gt;itemData(combobox-&gt;currentIndex())

            如果您使用自己的从 QComboBox 派生的类,则可以添加 currentData() 函数。

            【讨论】:

            • 谢谢。我刚刚在我的程序中使用了这个技巧。
            • @Patrice Bernassola 然而,'QVariant' 类型的开关操作:combobox-&gt;itemData(combobox-&gt;currentIndex()) 是非法的!!!为什么?
            • 如果没有选择任何内容,即currentIndex = -1,这将不起作用。如果 QComboBox 为空,它将返回最后一个索引中的数据或引发错误。
            【解决方案13】:

            您可以为所有项目设置QVariant数据,然后您可以在需要时获取值。

            有一个针对这种情况的示例代码:

            ui.comboBoxSheetSize->addItem("128 m", QVariant(128));
            ui.comboBoxSheetSize->addItem("256 m", QVariant(256));
            ui.comboBoxSheetSize->addItem("512 m", QVariant(512));
            ui.comboBoxSheetSize->addItem("1024 m", QVariant(1024));
            
            ...
            
            void Page::onComboSheetSizeChanged( int index )
            {
             int value = ui.comboBoxSheetSize->itemData(index).toInt();
            }
            

            顺便说一句,我想我误解了你的问题。我认为你获取数据的方式足够聪明?

            【讨论】:

              猜你喜欢
              • 2019-07-08
              • 1970-01-01
              • 2019-08-25
              • 1970-01-01
              • 2014-06-04
              • 1970-01-01
              • 1970-01-01
              • 2013-08-27
              • 1970-01-01
              相关资源
              最近更新 更多