145 lines
4.5 KiB
C++
145 lines
4.5 KiB
C++
#include "ImageGridWithTableWidget.h"
|
||
#include "ImageGridWidget.h"
|
||
#include <QSplitter>
|
||
#include <QHeaderView>
|
||
#include <QFileInfo>
|
||
#include <QHBoxLayout>
|
||
#include <QResizeEvent>
|
||
|
||
ImageGridWithTableWidget::ImageGridWithTableWidget(QWidget* parent)
|
||
: QWidget(parent) {
|
||
setupUi();
|
||
}
|
||
|
||
void ImageGridWithTableWidget::setupUi() {
|
||
// 创建分割器
|
||
QSplitter* splitter = new QSplitter(Qt::Horizontal, this);
|
||
|
||
// 创建网格控件
|
||
m_grid = new ImageGridWidget(this);
|
||
|
||
// 创建表格控件
|
||
m_table = new QTableWidget(this);
|
||
m_table->setColumnCount(2);
|
||
m_table->setHorizontalHeaderLabels({"序号", "图片名称"});
|
||
m_table->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||
m_table->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||
m_table->setAlternatingRowColors(true);
|
||
m_table->setColumnWidth(0, 60 );
|
||
m_table->setColumnWidth(1, 120);
|
||
|
||
|
||
// 添加到分割器
|
||
splitter->addWidget(m_grid);
|
||
splitter->addWidget(m_table);
|
||
splitter->setStretchFactor(0, 3);
|
||
splitter->setStretchFactor(1, 1);
|
||
|
||
// 设置布局
|
||
QHBoxLayout* layout = new QHBoxLayout(this);
|
||
layout->addWidget(splitter);
|
||
layout->setContentsMargins(0, 0, 0, 0);
|
||
setLayout(layout);
|
||
|
||
// 连接信号槽
|
||
connect(m_grid, &ImageGridWidget::tileClicked, this, &ImageGridWithTableWidget::onGridTileClicked);
|
||
connect(m_table, &QTableWidget::itemSelectionChanged, this, &ImageGridWithTableWidget::onTableSelectionChanged);
|
||
}
|
||
|
||
void ImageGridWithTableWidget::setImages(int index, const QImage& image) {
|
||
m_grid->setImages(index, image);
|
||
|
||
// 更新表格中对应项的图片名称列
|
||
if (index >= 0 && index < m_table->rowCount()) {
|
||
// 注意:这里我们不知道图片的文件名,因为传入的是QImage
|
||
// 可以考虑在initImages时预先填充表格,或者在其他地方维护文件名信息
|
||
QTableWidgetItem* nameItem = m_table->item(index, 1);
|
||
if (!nameItem) {
|
||
nameItem = new QTableWidgetItem("Image " + QString::number(index + 1));
|
||
m_table->setItem(index, 1, nameItem);
|
||
}
|
||
}
|
||
}
|
||
|
||
void ImageGridWithTableWidget::initImages(int count) {
|
||
// 初始化网格控件
|
||
m_grid->initImages(count);
|
||
|
||
// 填充表格数据
|
||
m_table->setRowCount(count);
|
||
for (int i = 0; i < count; ++i) {
|
||
// 序号列
|
||
QTableWidgetItem* indexItem = new QTableWidgetItem(QString::number(i + 1));
|
||
indexItem->setTextAlignment(Qt::AlignCenter);
|
||
m_table->setItem(i, 0, indexItem);
|
||
|
||
// 图片名称列,初始为空或默认值
|
||
QTableWidgetItem* nameItem = new QTableWidgetItem("");
|
||
m_table->setItem(i, 1, nameItem);
|
||
}
|
||
}
|
||
|
||
void ImageGridWithTableWidget::setSelectedIndex(int index) {
|
||
m_grid->setSelectedIndex(index);
|
||
syncSelectionToTable(index);
|
||
}
|
||
|
||
int ImageGridWithTableWidget::selectedIndex() const {
|
||
return m_grid->selectedIndex();
|
||
}
|
||
|
||
void ImageGridWithTableWidget::setExpandedIndex(int index) {
|
||
m_grid->setExpandedIndex(index);
|
||
}
|
||
|
||
int ImageGridWithTableWidget::expandedIndex() const {
|
||
return m_grid->expandedIndex();
|
||
}
|
||
|
||
int ImageGridWithTableWidget::columnCount() const {
|
||
return m_grid->columnCount();
|
||
}
|
||
|
||
int ImageGridWithTableWidget::rowCount() const {
|
||
return m_grid->rowCount();
|
||
}
|
||
|
||
QSize ImageGridWithTableWidget::tileBaseSize() const {
|
||
return m_grid->tileBaseSize();
|
||
}
|
||
|
||
void ImageGridWithTableWidget::onGridTileClicked(int index) {
|
||
syncSelectionToTable(index);
|
||
emit tileClicked(index);
|
||
}
|
||
|
||
void ImageGridWithTableWidget::onTableSelectionChanged() {
|
||
syncSelectionToGrid();
|
||
}
|
||
|
||
void ImageGridWithTableWidget::syncSelectionToTable(int index) {
|
||
if (index == -1) {
|
||
m_table->clearSelection();
|
||
} else if (index >= 0 && index < m_table->rowCount()) {
|
||
m_table->selectRow(index);
|
||
}
|
||
}
|
||
|
||
void ImageGridWithTableWidget::syncSelectionToGrid() {
|
||
QList<QTableWidgetItem*> selectedItems = m_table->selectedItems();
|
||
if (!selectedItems.isEmpty()) {
|
||
int row = selectedItems.first()->row();
|
||
if (m_grid && m_grid->selectedIndex() != row) {
|
||
m_grid->setSelectedIndex(row);
|
||
}
|
||
}
|
||
}
|
||
|
||
void ImageGridWithTableWidget::resizeEvent(QResizeEvent* event) {
|
||
QWidget::resizeEvent(event);
|
||
|
||
// 当组合控件大小变化时,确保网格能够自适应
|
||
// if (m_grid) {
|
||
// m_grid->updateTileSizes();
|
||
// }
|
||
} |