Шаг 84.
Библиотека Qt.
Класс QTableWidget

    На этом шаге рассмотрим класс 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.




Предыдущий шаг Содержание Следующий шаг