2013-08-02 2 views
0

Как добавить QSting и int в таблицуView одновременно с нажатием кнопки?Как добавить строку и int в QTableView при нажатии кнопки

Я хочу иметь первый столбец с именами и второй столбец с номерами. Оба элемента необходимо добавить в одну строку при нажатии кнопки.

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 для цвета ..и т. д. и т. д. и т. д.) – Trompa

+0

Единственная причина, по которой я хочу отображать их в виде целых чисел, заключается в том, что если одна из строк в таблицеView будет удалена, число за пределами таблицы будет обновлено, чтобы отразить эти изменения. Другими словами, ints нужно будет добавить вместе один раз в tableView. Мне нужна специальная модель и делегат для этого? –

+0

Вы должны показать, что второй номер колоны? Если нет, добавьте его как разную роль (Qt :: UserRole + 1) в QStandardItem первого столбца. Может быть, вы shoudl расскажите нам немного больше о том, чего вы хотите достичь. Итак, мы могли бы помочь вам лучше – Trompa

1

Хорошо, я соберу все в этом ответе:

Первое:

каждые данные в QStandardItemModel является QVariant, так что вы можете запросить данные либо

  1. модели с

    виртуальные данные QVariant (const QModelIndex & индекс, int role = Qt :: DisplayRole) const

  2. к QStandardItem с:

    виртуальных данных QVariant (INT роль = Qt :: UserRole + 1) Const

И возвратит QVariant. Вы можете получить Int с

int toInt(bool * ok = 0) const 

Обратите внимание, что Ьоо не является обязательным, но возвращает истину, если преобразование было Возможное.

Кроме того, вы можете проверить, если он может быть преобразован в междунар:

bool QVariant::canConvert(int targetTypeId) const 

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

Чтобы получить то, что вы хотите. Я хотел бы использовать метод takeRow из QStandardItemModel:

QList<QStandardItem *> takeRow(int row) 

, что его, наоборот, что вы делаете, чтобы добавить строку. Значит, вы знаете, что вы можете задать второй элемент возвращаемого QList для значения Int.

+0

Извините, но я немного смущен, документация для takeRow() говорит: «Удаляет элемент в (строка, столбец), не удаляя его» «Почему я хочу удалить его? ? Извините, если я не вижу очевидного. –

+0

Удаляет заданную строку без удаления элементов строки и возвращает список указателей на удаленные элементы. http://qt-project.org/doc/qt-5.0/qtgui/qstandarditemmodel.html#takeRow - он удаляет его из модели. Но не вызывает delete – Trompa

+0

ie. объекты все еще существуют в памяти, вы можете получить доступ к возвращенному списку. Но не от модели – Trompa

Смежные вопросы