Как динамически изменять количество столбцов при изменении размера QTableView?

Можно ли изменить количество столбцов в QTableView, когда пользователь динамически изменяет размер QTableView? Например, у меня есть 9 изображений с номерами 1-9, у меня есть QTableView с пользовательским делегатом, который рисует изображение в ячейке таблицы, я бы хотел, чтобы QTableView вел себя так, как показано на следующем рисунке:

Имгур

Каким должно быть мое направление и как мне его реализовать?


person Komgcn    schedule 19.02.2019    source источник
comment
Похоже, вам нужно больше макета, чем представления, не так ли? Существует пример макета потока на C++ и собственный макет потока в QML.   -  person ymoreau    schedule 19.02.2019
comment
В качестве альтернативы вы можете рассмотреть возможность использования QListView с viewMode установлен на QListView::IconMode и flow установлено значение QListView::LeftToRight.   -  person G.M.    schedule 19.02.2019
comment
У вас есть модель для представления таблицы? Вы можете обработать событие изменения размера вашей таблицы, передать текущую ширину таблицы в модель и позволить ей рассчитать количество столбцов. Однако такой подход тормозит паттерн MVC, т. е. модель не должна зависеть от представления.   -  person vahancho    schedule 19.02.2019
comment
@G.M. Я приму ваше решение, спасибо за ваш ответ   -  person Komgcn    schedule 21.02.2019


Ответы (1)


Вот мой код для решения:

QListViewIconModeLtoRFlow::QListViewIconModeLtoRFlow(QWidget *parent): QMainWindow(parent)
{
    ui.setupUi(this);

    QFrame *frame = new QFrame;
    QVBoxLayout *main = new QVBoxLayout(frame);

    QListView *list = new QListView;
    list->setFlow(QListView::LeftToRight);
    list->setResizeMode(QListView::Adjust);
    list->setViewMode(QListView::IconMode);
    list->setIconSize(QSize(50,50));

    QStandardItemModel *model = new QStandardItemModel;
    list->setModel(model);

    for (int i = 0; i < 50; ++i)
    {
        QPixmap p("F:\\boro.jpg");
        QIcon *icon = new QIcon(p);
        QStandardItem *item = new QStandardItem(*icon, NULL); //NULL to hide string appearance
        model->appendRow(item);
    }
    main->addWidget(list);
    setCentralWidget(frame);
}

Под значком появится текст, если QStandardItem построен как обычно:

Имгур

Вместо этого передайте NULL в качестве параметра QString:

Имгур

person Komgcn    schedule 21.02.2019