Russian Qt Forum

Qt => Вопросы новичков => Тема начата: gertvaQT от Ноябрь 10, 2013, 23:17



Название: Как вывести из QMap в tableWidget?
Отправлено: gertvaQT от Ноябрь 10, 2013, 23:17
Добрый день.
Есть  QMap<QString, int> *map = new QMap<QString, int>();
Не могу вывести в tableWidget. В mainwindow.срр пытаюсь вывести так:

void MainWindow::on_goButton_clicked()
{
    ui->tableWidget->clearContents();
    ui->tableWidget->setRowCount(0);
    for (int i=0; i<map->size();i++)
    {
        ui->tableWidget->setRowCount(ui->tableWidget->rowCount() + 1);
        QTableWidgetItem *newItem = new QTableWidgetItem();
        newItem->setText(map->key());
        ui->tableWidget->setItem(ui->tableWidget->rowCount() - 1, 0, newItem);
        newItem = new QTableWidgetItem();
        newItem->setText(map->value());
        ui->tableWidget->setItem(ui->tableWidget->rowCount() - 1, 1, newItem);
    }
}

Ругается на  newItem->setText(map->key()); и  newItem->setText(map->value());
Пишет : C:\Qt\Qt5.1.1\Tools\QtCreator\bin\kursMap\mainwindow.cpp:61: ошибка: no matching function for call to 'QMap<QString, int>::key()'
          newItem->setText(map->key());
                                   
Как достать в этом случае содержимое QMap? Заранее благодарен.


Название: Re: Как вывести из QMap в tableWidget?
Отправлено: kibsoft от Ноябрь 10, 2013, 23:40
Читайте документацию.

Цитировать
If you want to navigate through all the (key, value) pairs stored in a QMap, you can use an iterator. QMap provides both Java-style iterators (QMapIterator and QMutableMapIterator) and STL-style iterators (QMap::const_iterator and QMap::iterator). Here's how to iterate over a QMap<QString, int> using a Java-style iterator:
Код:
QMapIterator<QString, int> i(map);
while (i.hasNext()) {
    i.next();
    cout << i.key() << ": " << i.value() << endl;
}
Here's the same code, but using an STL-style iterator this time:
Код:
QMap<QString, int>::const_iterator i = map.constBegin();
while (i != map.constEnd()) {
    cout << i.key() << ": " << i.value() << endl;
    ++i;
}
The items are traversed in ascending key order.


Название: Re: Как вывести из QMap в tableWidget?
Отправлено: gertvaQT от Ноябрь 11, 2013, 21:28
Спасибо. Получилось максимум так. В таком виде запускается, но при нажатии на goButton программа виснет намертво.  Что можно сделать?

void MainWindow::on_goButton_clicked()
{
    ui->tableWidget->clearContents();
    ui->tableWidget->setRowCount(0);

    QMap<QString, int>::const_iterator i = map->constBegin();
    while (i != map->constEnd()) {
        ui->tableWidget->setRowCount(ui->tableWidget->rowCount() + 1);
        QTableWidgetItem *newItem = new QTableWidgetItem();
        newItem->setText(i.key());
        ui->tableWidget->setItem(ui->tableWidget->rowCount() - 1, 0, newItem);
        newItem = new QTableWidgetItem();
        QString str;
        str = i.value();
        newItem->setText(str);
        ui->tableWidget->setItem(ui->tableWidget->rowCount() - 1, 1, newItem);

    }
}


Название: Re: Как вывести из QMap в tableWidget?
Отправлено: kambala от Ноябрь 11, 2013, 22:06
дописать в конце цикла ++i


Название: Re: Как вывести из QMap в tableWidget?
Отправлено: gertvaQT от Ноябрь 11, 2013, 23:23
kibsoft, kambala огромное спасибо, дай Вам бог здоровья.


Название: Re: Как вывести из QMap в tableWidget?
Отправлено: kibsoft от Ноябрь 12, 2013, 14:32
За такие дела точно должен дать :)