我正在使用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的索引不对应。然而,它使加法操作成功!!!
这是洞文件,展示了我想要实现的目标:
#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));
}
}
有什么建议吗?
答案 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的数据。