1

我正在使用带有 QT Creator 的 Qt 制作一个简单的计算器我想将一个值从 QCombobox(包含操作:'+'、'-'、'*'、'/')转换为 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);

输出

价值 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));
    }
}

我已经使用图形界面为组合框设置了值 组合框值

有什么建议么?

4

2 回答 2

3

你的意思是写:

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

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

itemData仅当您使用 将数据附加到项目时才相关setItemData

于 2016-01-23T14:36:19.293 回答
1

您似乎混淆了 QComboBox 可以包含的两个值:文本(您在 Qt Creator 对话框屏幕截图中编辑的内容)和实际有用的有效负载,存储在 QVariant QCombobox::setItemData(int, QVariant, int) http://doc.qt.io/qt- 4.8/qcombobox.html#setItemData。如果要保存并稍后在每个组合框条目旁边检索一个 int,请使用后一个函数和对应QComboBox::itemData(int, int)的检索。

严格来说,QComboBox 中有一个成熟的 QStandardItemModel 用于存储数据。引用文档:

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

于 2016-01-23T14:41:14.457 回答