【问题标题】:How to convert QComboBox value to int in QT如何在 QT 中将 QComboBox 值转换为 int
【发布时间】:2016-01-23 14:23:40
【问题描述】:

我正在使用 Qt 和 QT Creator 制作一个简单的计算器 我想将一个值从 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));
    }
}

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

有什么建议吗?

【问题讨论】:

  • 你知道在使用它之前你必须设置itemData,不是吗?那你是怎么设置的?
  • @MehrdadMomeny 我已经使用图形界面来完成它,我将包含在我的帖子中:)

标签: c++ qt user-interface qcombobox qvariant


【解决方案1】:

你的意思是写:

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

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

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

【讨论】:

  • 这正是问题所在:p 使用 gui 界面似乎更容易
【解决方案2】:

您似乎混淆了 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 的模型中的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-14
    • 2011-09-24
    • 2017-06-16
    • 2020-07-15
    • 2018-07-22
    • 2017-01-18
    • 1970-01-01
    • 2021-01-27
    相关资源
    最近更新 更多