2016-01-23 24 views
1

我正在製作一個簡單的計算器,使用Qt與QT Creator 我想從QCombobox轉換一個值(即維持操作:'+',' - ','*' , '/')爲int,所以我用這個:如何將QComboBox的值轉換爲QT中的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 w的索引henver我選擇了任何操作。但是,它使添加操作成功!
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 Values

有什麼建議?

+0

你知道你必須在使用它之前設置itemData,不是嗎?那麼你在哪裏以及如何設置它? –

+0

@MehrdadMomeny我已經使用圖形界面來做到這一點,我將包括到我的文章:) –

回答

3

你意在寫:

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

這使所選擇的組合框索引(0是第一個, 「+」,1秒, 「 - 」 等)。

itemData僅當您使用setItemData將數據附加到該項目時纔有意義。

+0

這正是問題:p它似乎更容易使用gui界面 –

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的模型中的數據。