После создания и центровки заголовков столбцов мы в цикле просматриваем все переданные нам данные с координатами. Для каждой пары (x, у) мы создаем два элемента QTableWidgetItem, соответствующие координатам x и у. Эти элементы добавляются в таблицу, используя функцию QTableWidget::setItem(), в аргументах которой кроме самого элемента задаются его строка и столбец.

По умолчанию виджет QTableWidget разрешает редактирование. Пользователь может редактировать любую ячейку таблицы, установив на нее курсор и нажав F2 или просто вводя текст с клавиатуры. Все сделанные пользователем изменения автоматически сохранятся в элементах QTableWidgetltem. Запретить редактирование мы можем с помощью вызова setEditTriggers(QAbstractItemView::NoEditTriggers).

01 void CoordinateSetter::addRow()

02 {

03 int row = tableWidget->rowCount();

04 tableWidget->insertRow(row);

05 QTableWidgetltem *item0 = new QTableWidgetltem;

06 item0->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);

07 tableWidget->setItem(row, 0, item0);

08 QTableWidgetltem *item1 = new QTableWidgetltem;

09 item1->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);

10 tableWidget->setItem(row, 1, item1);

11 tableWidget->setCurrentItem(item0);

12 }

Слот addRow() вызывается, когда пользователь щелкает по кнопке Add Row (добавить строку). Мы добавляем в конец таблицы новую строку, используя insertRow(). Если пользователь попытается отредактировать какую-нибудь ячейку новой строки, QTableWidget автоматически создаст новый объект QTableWidgetItem.

01 void CoordinateSetter::done(int result)

02 {

03 if (result == QDialog::Accepted) {

04 coordinates->clear();

05 for (int row = 0; row < tableWidget->rowCount(); ++row) {

06 double x = tableWidget->item(row, 0)->text().toDouble();

07 double у = tableWidget->item(row, 1)->text().toDouble();

08 coordinates->append(QPointF(x, y));

09 }

10 }

11 QDialog::done(result);

12 }

Наконец, когда пользователь нажимает кнопку OK, мы очищаем координаты, переданные ранее в диалоговое окно, и создаем новый набор на основе координат в элементах виджета QTableWidget.

В качестве нашего третьего и последнего примера применения в Qt удобных виджетов отображения элементов мы рассмотрим некоторые фрагменты приложения, которое показывает параметры настройки Qt—приложения, используя QTreeWidget. Данный виджет по умолчанию используется только для чтения.

Рис. 10.5. Приложение Просмотр параметров настройки (Settings Viewer).

Ниже приводится фрагмент конструктора:

01 SettingsViewer::SettingsViewer(QWidget *parent)

02 : QDialog(parent)

03 {

04 organization = "Trolltech";

05 application = "Designer";

06 treeWidget = new QTreeWidget;

08 treeWidget->setColumnCount(2);

09 treeWidget->setHeaderLabels(

10 QStringList() << tr("Key") << tr("Value"));

11 treeWidget->header()->setResizeMode(0, QHeaderView::Stretch);

12 treeWidget->header()->setResizeMode(1, QHeaderView::Stretch);

13 …

14 setWindowTitle(tr("Settings Viewer"));

15 readSettings();

16 }

Перейти на страницу:

Похожие книги