На этом шаге рассмотрим класс QTableWidget.
Класс QTableWidget представляет собой таблицу. Объект ячейки реализован в классе QTableWidgetItem. Созданную ячейку можно вставить в таблицу вызовом метода QTableWidget::setItem(). Первым параметром метода setItem() является номер строки, а вторым — номер столбца. Таким образом, эти параметры задают местоположение ячейки в таблице.
Установить текст в самой ячейке можно с помощью метода QTableWidgetItem::setText(), а для размещения растрового изображения можно воспользоваться методом QTableWidgetItem::setIcon(). Если в ячейке установлены как текст, так и растровое изображение, то растровое изображение займет место слева от текста.
Класс ячейки QTableWidgetItem предоставляет конструктор копирования, что позволяет создавать копии элементов. Также для этой цели можно воспользоваться методом clone().
В таблицу допускается, помимо текста и иконок, помещать и виджеты. Для этого используется метод setCellWidget().
При двойном щелчке кнопкой мыши на поле ячейки она переходит в режим редактирования, при этом используя виджет QLineEdit.
Приложение, показанное на рис. 1, использует таблицу, состоящую из трех столбцов и трех строк. Содержимое ячеек можно изменять.
Рис.1. Пример таблицы
Рассмотрим текст приложения:
const int n = 10; int pr; //создается виджет таблицы tbl //первый и второй параметры, передаваемые в конструктор, //задают количество строк и столбцов //таблица будет иметь размерность 10 на 10 QTableWidget tbl(n, n); QTableWidgetItem* ptwi = 0; QStringList lst; //чтобы задать заголовки строк и столбцов таблицы //(которые у нас совпадают), мы сначала формируем их список lst << "0" << "1" << "2" << "3" << "4" << "5" << "6" << "7" << "8" << "9"; //а затем передаем его в метод setHorizontalHeaderLabel() //для горизонтальных и в setVerticalHeaderLabel() //для вертикальных заголовков tbl.setHorizontalHeaderLabels(lst); tbl.setVerticalHeaderLabels(lst); //создание объектов ячеек выполняется в цикле (указатель ptwi) //в качестве текста в конструктор передается произведение //номера строки и столбца ячейки for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { pr=i*j; ptwi = new QTableWidgetItem(QString("%1").arg(pr)); //вызовом метода setItem() созданная ячейка таблицы //устанавливается в позицию, указанную в первом //и втором параметрах tbl.setItem(i, j, ptwi); } }
Файлы приложения можно взять здесь.
Приложение, показанное на рис. 2, использует таблицу для отображения картинок.
Рис.2. Пример таблицы с картинками
//формируем имя файла str=QString::number(i)+QString::number(j)+".jpg"; //задаем высоту и tbl.setRowHeight(i, 120); //ширину ячейки таблицы tbl.setColumnWidth(j, 100); //создали растровое изображение QPixmap pix(str); QWidget* pwgt = new QWidget; QLabel *lbl3=new QLabel(); //установим размер виджета надписи по размеру изображения lbl3->resize(pix.size()); //установим изображение в виджет надписи lbl3->setPixmap(pix); QHBoxLayout* pvbxLayout = new QHBoxLayout; pvbxLayout->addWidget(lbl3); pwgt->setLayout(pvbxLayout); //в ячейку с номером i,j размещаем виджет надписи tbl.setCellWidget(i, j, pwgt);
Файлы приложения можно взять здесь.
На следующем шаге рассмотрим класс QComboBox.