Клон QTableWidget

Я знаю, что QTableWidget не имеет конструктора копирования, поскольку (поправьте меня, если я ошибаюсь), он основан на парадигме вида / модели.

Но может случиться так, что вам понадобится копия QTableWidgetкогда, например, вам нужно выполнить какие-то операции в функции, и вы не хотите влиять на вид в виджете. Например:

  • Вы можете экспортировать таблицу в png-файл:

    void exportMyTable(const QTableWidget& table){
        ...
        table.grab().save(fileExportFilePath);
    }
    

    ...но grab Метод не является const (я не могу понять, почему...), поэтому вам нужно создать локальную копию раньше.

  • Возможно, вы захотите скопировать его в буфер обмена или экспортировать в CSV, поэтому вам нужно удалить все ячейки перед экспортом и иметь временный QTableWidget копия может помочь.

  • ...так далее...

Кстати, обходной путь может заключаться в копировании всего содержимого ячейка за ячейкой:

void exportMyTable(const QTableWidget& table){
    QTableWidget copyTable;
    copyTable.setRowCount(table.rowCount());
    copyTable.setColumnCount(table.columnCount());
    for (int c = 0; c < table.columnCount(); ++c)   
        for (int r = 0; r < table.rowCount(); ++r)
            copyTable.setSpan(r, c, table.rowSpan(r, c), table.columnSpan(r, c));
    ...
}

но приведенный выше код дает сбой в случае диапазона ячеек, поэтому мне нужно скопировать все промежутки, затем все заголовки и т. д.

Итак, вернемся к первоначальному вопросу, есть ли способ клонировать QTableWidget проще всего? И модель, и вид в новом объекте.

0 ответов

Другие вопросы по тегам