如何在QT中将QComboBox值转换为int

时间:2016-01-23 14:23:40

标签: c++ qt user-interface qcombobox qvariant

我正在使用Qt和QT Creator制作一个简单的计算器 我想转换来自QCombobox的值(包含操作:' +',' - ',' *',' /& #39;)到int所以我使用了这个:

// operation is the name of my QComboBox :)

QVariant i = ui -> operation -> itemData(ui -> operation -> currentIndex()); 
int val = i.toInt();

当试图打印i的值来测试它时,我得到:

printf("valeur %d \n",i);

输出

  

valeur 1219552

     

valeur 1219552

     

valeur 1219552

     

valeur 1219552

     

valeur 1219552

转换给了我相同的值,当我选择任何操作时,它与QComboBox的索引不对应。然而,它使加法操作成功!!! Calculator
这是洞文件,展示了我想要实现的目标:

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this); // lance la construction de la fenêtre.
    connect(ui->boutonEgale, SIGNAL(clicked()), this,SLOT(calculerOperation()));

}

Dialog::~Dialog()
{
    delete ui;
}


void Dialog::calculerOperation()
{
    QVariant i =   ui->operation->itemData(ui->operation->currentIndex());  
    int val = i.toInt();

    int rst = 0;
    switch(val)
    {
    case 0:  // +
    rst = ui->nb1->value() + ui->nb2->value();
    ui->result->setText(QString::number(rst));  
    break;
    case 1:  // -
    rst = ui->nb1->value() - ui->nb2->value();
    ui->result->setText(QString::number(rst));  
    break;
    case 2: // *
    rst = ui->nb1->value() * ui->nb2->value();
    ui->result->setText(QString::number(rst));   
    break;
    case 3: // /
    rst = ui->nb1->value() / ui->nb2->value();
    ui->result->setText(QString::number(rst));   
    break;
    default:
    rst = ui->nb1->value() + ui->nb2->value();
    ui->result->setText(QString::number(rst));
    }
}

我使用图形界面来放置comboBox的值 comboBox  Values

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

你打算写:

int val = ui->operation->currentIndex();

这给出了所选的组合框索引(0是第一个," +",1是第二个," - "等等)。

仅当您使用itemData将数据附加到项目时,

setItemData才有意义。

答案 1 :(得分:1)

您似乎混淆了QComboBox可以包含的两个值:文本(您在Qt Creator对话框屏幕中编辑的内容)和实际有用的有效负载,存储在QVariant中QCombobox::setItemData(int, QVariant, int) {{3} }。如果要保存并稍后在每个组合框条目旁边检索一个int,请使用后一个函数并使用相应的QComboBox::itemData(int, int)进行检索。

严格地说,QComboBox中有一个用于存储数据的完整QStandardItemModel。引用文档:

  

QComboBox将模型/视图框架用于其弹出列表并存储其项目。默认情况下,QStandardItemModel存储项目,QListView子类显示弹出列表。您可以直接访问模型和视图(使用model()和view()),但QComboBox还提供了设置和获取项数据的函数(例如,setItemData()和itemText())。您还可以设置新模型和视图(使用setModel()和setView())。对于组合框标签中的文本和图标,使用模型中具有Qt :: DisplayRole和Qt :: DecorationRole的数据。