2013-08-02 19 views
0

如何在單擊按鈕時同時將QSting和int添加到tableView?如何在單擊按鈕時向QTableView添加字符串和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

它是否真的是一個整數,也可以只是看起來像一個整數?

傳統上在表中,文本顯示爲左對齊,數字顯示爲右對齊。您可以通過設置對準你的第二個欄得到這樣的效果:

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

如果你需要使用的數據在你的程序在其他地方的整數,你可以將QString的轉換爲整數,當你需要它。

+0

+1爲解決方案。記錄。 QStandardItem中的數據是QVariant。 (對於任何角色,請檢查'QVariant QStandardItem :: data(int role)'這是將displayRole轉換爲QString(和backgroundRole爲一個顏色..等等etc etc) – Trompa

+0

我想把它們顯示爲一個整數的唯一原因是因爲如果tableView中的一行被刪除,表中的一個數字將被更新以反映這些改變。換句話說,整數將需要在tableView中一起添加。我需要一個自定義模型和代表嗎? –

+0

你必須顯示第二個列表號碼?如果不是,則將其作爲不同角色(Qt :: UserRole + 1)添加到第一列的QStandardItem中。也許你應該告訴我們更多關於你想要達到的目標。所以我們可以幫助你更好 – Trompa

1

好吧,我會收集所有在這個答案:

第一:

在QStandardItemModel每個數據是一個的QVariant,這樣你就可以查詢數據要麼

  1. 到模型與

    虛擬QVariant數據(const QModelIndex & index,int role = Qt :: DisplayRole)const

  2. 到QStandardItem用:

    虛擬的QVariant數據(INT角色= Qt的::的UserRole + 1)常量

兩者都將返回的QVariant。你可以用

int toInt(bool * ok = 0) const 

注意,布爾是可選得到INT,但如果轉換爲更多鈔票將返回true。

此外,您還可以檢查它是否可以轉換爲int:

bool QVariant::canConvert(int targetTypeId) const 

yourVariant.canConvert(QMetaType::Int) should return true. 

爲了得到你想要的。我會用從QStandardItemModel takeRow方法:

QList<QStandardItem *> takeRow(int row) 

也就是說它,相反你做追加行什麼。所以你知道你可以詢問返回的QList的第二個元素的Int值。

+0

對不起,但我有點困惑,takeRow()的文檔說:「刪除(行,列)的項目而不刪除它」爲什麼要刪除它?對不起,如果我沒有看到明顯的。 –

+0

刪除給定的行而不刪除行項目,並返回指向已刪除項目的指針列表。 http://qt-project.org/doc/qt-5.0/qtgui/qstandarditemmodel.html#takeRow - 將其從模型中刪除。但不呼叫刪除 – Trompa

+0

即。 objets仍然存在於內存中,您可以訪問em throutgh返回的列表。但不是從模型 – Trompa

相關問題