#include "ImageGridWithTableWidget.h" #include "ImageGridWidget.h" #include #include #include #include #include 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 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(); // } }