1

私はQTクリエーターで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));
    }
}

グラフィカル インターフェイスを使用して、comboBox の値を設定しました コンボボックスの値

助言がありますか?

4

2 に答える 2

3

あなたが書くつもりだった:

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

これにより、選択されたコンボボックスのインデックスが得られます (0 が最初、"+"、1 が 2 番目、"-" など)。

itemDataを使用してアイテムにデータを添付した場合にのみ関連しますsetItemData

于 2016-01-23T14:36:19.293 に答える
1

QComboBox に含めることができる 2 つの値を混同しているようです: テキスト (Qt Creator ダイアログのスクリーンショットで編集しているもの) と、QVariant に格納されている実際の有用なペイロードQCombobox::setItemData(int, QVariant, int) http://doc.qt.io/qt- 4.8/qcombobox.html#setItemData . すべてのコンボボックス エントリと一緒に int を保存して後で取得する場合は、後者の関数とQComboBox::itemData(int, int)取得に対応する teh を使用します。

厳密に言えば、データを格納するために使用される QComboBox 内に本格的な QStandardItemModel があります。ドキュメントを引用するには:

QComboBox は、モデル/ビュー フレームワークをポップアップ リストとアイテムの格納に使用します。デフォルトでは、QStandardItemModel がアイテムを格納し、QListView サブクラスが popuplist を表示します。モデルとビューに (model() と view() を使用して) 直接アクセスできますが、QComboBox には項目データを設定および取得する関数 (setItemData() と itemText() など) も用意されています。新しいモデルとビューを設定することもできます (setModel() と setView() を使用)。コンボボックス ラベルのテキストとアイコンには、Qt::DisplayRole と Qt::DecorationRole を持つモデルのデータが使用されます。

于 2016-01-23T14:41:14.457 に答える