单击按钮时如何将字符串和int添加到QTableView

时间:2013-08-02 12:56:58

标签: c++ qt qtableview

如何在单击按钮的同时向tableView添加QSting和int?

我想要的是让第一列包含名称,第二列包含数字。单击按钮时,两个项目都需要添加到同一行。

    Col 1---      Col 2--- 

    First Name    1 
    Second Name   2 
    Third Name    3

以下是我添加两个字符串的内容,如何将第二个单元格转换为int?

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    model = new QStandardItemModel();
    model->setRowCount(0);
    ui->tableView->setModel(model);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    QStandardItem *userName = new QStandardItem(ui->lineEdit_Name->text());
    QStandardItem *userNumber = new QStandardItem(ui->lineEdit_Number->text());

    QList<QStandardItem*> row;
    row <<userName << userNumber;

    model->appendRow(row);
}

非常感谢

2 个答案:

答案 0 :(得分:2)

它真的必须是一个整数还是只是一个整数?

传统上,在表格中,文本左对齐显示,数字右对齐显示。您可以通过设置第二列的对齐来获得此效果:

QStandardItem *userNumber = new QStandardItem(ui->lineEdit_Number->text());
userNumber->setAlignment(Qt::AlignRight | Qt::AlignVCenter);

如果您需要在程序中的其他位置使用数据作为整数,则可以在需要时将QString转换为整数。

答案 1 :(得分:1)

好的,我将收集所有答案:

首先:

QStandardItemModel中的每个数据都是QVariant,因此您可以查询数据

  1. 的模型

    虚拟QVariant数据(const QModelIndex&amp; index,int role = Qt :: DisplayRole)const

  2. 带有:

    到QStandardItem

    虚拟QVariant数据(int role = Qt :: UserRole + 1)const

  3. 两者都将返回QVariant。您可以使用

    获取int
    int toInt(bool * ok = 0) const
    

    请注意,bool是可选的,但如果转换是可行的,则返回true。

    此外,您可以检查它是否可以转换为int:

    bool QVariant::canConvert(int targetTypeId) const
    
    yourVariant.canConvert( QMetaType::Int ) should return true.
    

    获得你想要的东西。我会使用QStandardItemModel中的takeRow方法:

     QList<QStandardItem *> takeRow(int row)
    

    它,与你追加行的做法相反。所以你知道你可以向返回的QList的第二个元素询问Int值。