0

单击按钮时,如何同时将 QSting 和 int 添加到 tableView?

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

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

非常感谢

4

2 回答 2

2

它真的必须是一个整数还是看起来像一个整数?

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

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

如果您需要在程序的其他地方将数据用作整数,您可以在需要时将 QString 转换为整数。

于 2013-08-02T13:11:17.143 回答
1

好的,我将在这个答案中收集所有内容:

第一的:

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

  1. 与模型

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

  2. 到 QStandardItem:

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

两者都将返回一个 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 值。

于 2013-08-02T14:30:40.730 回答