Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Drop on QTableView creates new columns

Drop on QTableView creates new columns

Scheduled Pinned Locked Moved General and Desktop
1 Posts 1 Posters 525 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    torkelh
    wrote on last edited by
    #1

    I have two QTableViews in a dialog. One table view contains "available items", and the other contains "selected items". Both QTableViews have three columns, and each table view is connected to its own QStandardItemModel.

    Dropping a row from "available items" to "selected items" works fine, as long as I drop the row at the first column. But if I drop the row at the second or third column (between two rows that has already been selected by drag & drop), new columns are created. The text is inserted from the second or third column onwards.

    Is it possible to prevent this from happening? A row that is dropped on "selected items" shall always be inserted from the first column.

    @
    Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
    {
    ui->setupUi(this);

    QStandardItemModel* availableModel_ = new QStandardItemModel();
    availableModel_->setHorizontalHeaderItem(0, new QStandardItem("First"));
    availableModel_->setHorizontalHeaderItem(1, new QStandardItem("Second"));
    availableModel_->setHorizontalHeaderItem(2, new QStandardItem("Third"));
    
    ui->tvAvailable->setModel(availableModel_);
    ui->tvAvailable->setSelectionBehavior(QAbstractItemView::SelectRows);
    ui->tvAvailable->setSelectionMode(QAbstractItemView::ExtendedSelection);
    ui->tvAvailable->verticalHeader()->setVisible(false);
    ui->tvAvailable->setEditTriggers(QAbstractItemView::NoEditTriggers);
    
    ui->tvAvailable->setDragEnabled(true);
    ui->tvAvailable->setDragDropOverwriteMode(false);
    ui->tvAvailable->setDefaultDropAction(Qt::MoveAction);
    
    QStandardItemModel* selectedModel_ = new QStandardItemModel();
    selectedModel_->setHorizontalHeaderItem(0, new QStandardItem("First"));
    selectedModel_->setHorizontalHeaderItem(1, new QStandardItem("Second"));
    selectedModel_->setHorizontalHeaderItem(2, new QStandardItem("Third"));
    
    ui->tvSelected->setModel(selectedModel_);
    ui->tvSelected->setSelectionBehavior(QAbstractItemView::SelectRows);
    ui->tvSelected->setSelectionMode(QAbstractItemView::NoSelection);
    ui->tvSelected->verticalHeader()->setVisible(false);
    ui->tvSelected->setEditTriggers(QAbstractItemView::NoEditTriggers);
    
    ui->tvSelected->setAcceptDrops(true);
    ui->tvSelected->setDropIndicatorShown(true);
    
    int row = 0;
    int col = 0;
    availableModel_->insertRows(0, 4);
    availableModel_->setData(availableModel_->index(row, col), QString("Row 1"));
    availableModel_->item(row,col++)->setDropEnabled(false);
    availableModel_->setData(availableModel_->index(row, col), QString("The first row"));
    availableModel_->item(row,col++)->setDropEnabled(false);
    availableModel_->setData(availableModel_->index(row, col), 1);
    availableModel_->item(row,col++)->setDropEnabled(false);
    
    row++;
    col = 0;
    availableModel_->setData(availableModel_->index(row, col), QString("Row 2"));
    availableModel_->item(row,col++)->setDropEnabled(false);
    availableModel_->setData(availableModel_->index(row, col), QString("The second row"));
    availableModel_->item(row,col++)->setDropEnabled(false);
    availableModel_->setData(availableModel_->index(row, col), 2);
    availableModel_->item(row,col++)->setDropEnabled(false);
    
    row++;
    col = 0;
    availableModel_->setData(availableModel_->index(row, col), QString("Row 3"));
    availableModel_->item(row,col++)->setDropEnabled(false);
    availableModel_->setData(availableModel_->index(row, col), QString("The third row"));
    availableModel_->item(row,col++)->setDropEnabled(false);
    availableModel_->setData(availableModel_->index(row, col), 3);
    availableModel_->item(row,col++)->setDropEnabled(false);
    
    row++;
    col = 0;
    availableModel_->setData(availableModel_->index(row, col), QString("Row 4"));
    availableModel_->item(row,col++)->setDropEnabled(false);
    availableModel_->setData(availableModel_->index(row, col), QString("The fourth row"));
    availableModel_->item(row,col++)->setDropEnabled(false);
    availableModel_->setData(availableModel_->index(row, col), 4);
    availableModel_->item(row,col++)->setDropEnabled(false);
    

    }
    @

    1 Reply Last reply
    0

    • Login

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved