Dodanie kolumny z checkboxem do QTableView



  • Dzień dobry,
    Jak można do daćkolumnęz checkboxem do QTableView opartem na modelu: QSqlQueryModel


  • Moderators

    Można użyć modelu proxy, który będzie interpretował jakieś dane (np. "0" i "1") jako checkbox, np.

    class MyProxy : public QIdentityProxyModel
    {
    public:
        MyProxy(QObject* parent) : QIdentityProxyModel(parent) {}
    
        QVariant data(const QModelIndex& index, int role) const override
        {
            if (role == Qt::CheckStateRole && index.column() == 0)
            {
                QString str_value = QIdentityProxyModel::data(index, Qt::DisplayRole).toString();
                return (str_value == "1") ? Qt::Checked : Qt::Unchecked;
            }
    
            return QIdentityProxyModel::data(index, role);
        }
    
        bool setData(const QModelIndex& index, const QVariant& value, int role) override
        {
            if (role == Qt::CheckStateRole && index.column() == 0)
            {
                QString str_value = (value.toInt() == Qt::Checked) ? "1" : "0";
                return QIdentityProxyModel::setData(index, str_value, Qt::EditRole);
            }
            else
                return QIdentityProxyModel::setData(index, value, role);
        }
    
        Qt::ItemFlags flags(const QModelIndex& index) const override
        {
            Qt::ItemFlags f = QIdentityProxyModel::flags(index);
            if (index.column() == 0)
                f |= Qt::ItemIsUserCheckable;
            return f;
        }
    };
    

    oczywiście numer kolumny i dane rozpoznawane jako "zaznaczony" można sobie dostosować.
    Takiego modelu można użyć potem tak:

    QSqlTableModel* model = new QSqlTableModel(parent, database);
    MyProxy* proxy = new MyProxy(parent);
    proxy->setSourceModel(model);
    tableView->setModel(proxy);
    


Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.