我正在使用Qt与calculator一起制作一个简单的计算器,我希望从QCombobox (包含操作:'+‘,’‘,'*','/')中转换一个值,所以我使用了以下方法:
// 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);输出
1219552标准 1219552标准 1219552标准 1219552标准 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));
}
}我使用了图形界面来将comboBox的值

有什么建议吗?
发布于 2016-01-23 14:36:19
你的意思是:
int val = ui->operation->currentIndex();这给出了所选的组合框索引(0是第一个,"+",1是第二个,"-“等等)。
只有在使用itemData将数据附加到项目的情况下,setItemData才是相关的。
发布于 2016-01-23 14:41:14
您似乎混淆了QComboBox可以包含的两个值:文本(您在QVariant对话框屏幕快照中编辑的内容)和存储在QVariant QCombobox::setItemData(int, QVariant, int) http://doc.qt.io/qt-4.8/qcombobox.html#setItemData中的实际有用有效负载。如果希望在每个combobox条目旁边保存和检索int,请使用后一个函数并使用相应的QComboBox::itemData(int, int)进行检索。
严格地说,在用来存储数据的QComboBox中有一个完整的QComboBox.引用文档:
QComboBox对其弹出列表使用模型/视图框架并存储其项。默认情况下,QStandardItemModel存储项,QListView子类显示popuplist。您可以直接访问模型和视图(使用model()和view()),但是QComboBox还提供了设置和获取项数据的函数(例如,setItemData()和itemText())。您还可以设置一个新的模型和视图(使用setModel()和setView())。对于combobox标签中的文本和图标,使用具有Qt::DisplayRole和Qt::DecorationRole的模型中的数据。
https://stackoverflow.com/questions/34964631
复制相似问题