QTableWidget Drag Item не удаляется при падении в недопустимую область - PullRequest
0 голосов
/ 05 сентября 2018

Практически, как гласит заголовок, когда я перетаскиваю элемент из QTableWidget, он добавляет дочерний элемент в ui-> table-> children, а затем запускает событие ChildAdded для моего eventFilter, проблема в том, что если я уроню перетаскиваемый элемент в область, которая не допускает удаление этого дочернего элемента, не будет удалено из ui-> table-> children, тогда как при освобождении перетаскиваемого элемента в области, для которой было разрешено удаление, также будет запущено событие ChildRemoved.

Вот мой код инициализации:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    m_ui(new Ui::MainWindow)
{
    m_ui->setupUi(this);

    m_ui->left_table->installEventFilter(this);
    m_ui->right_table->installEventFilter(this);

    m_ui->left_table->setColumnCount(1);
    m_ui->left_table->setRowCount(25);
    m_ui->left_table->setHorizontalHeaderLabels({"Source"});
    m_ui->left_table->horizontalHeader()->setStretchLastSection(true);
    m_ui->left_table->setAcceptDrops(false);
    m_ui->left_table->setDragEnabled(true);

    m_ui->right_table->setColumnCount(1);
    m_ui->right_table->setHorizontalHeaderLabels({"Receiver"});
    m_ui->right_table->horizontalHeader()->setStretchLastSection(true);
    m_ui->right_table->setAcceptDrops(true);

    for (int i = 0; i < 25; ++i) {
        m_ui->left_table->setItem(i, 0, new QTableWidgetItem(QString::number(i)));
    }

    qDebug() << "Left childs: " << m_ui->left_table->children().size();
}

и фильтр событий:

bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
    if (event->type() == QEvent::ChildAdded || event->type() == QEvent::ChildRemoved) {
        qDebug() << "Object: " << watched->objectName()
                 << " Event: " << event->type()
                 << "Childs: " << m_ui->left_table->children().size();
    }
    return false;
}

Пример удаления недопустимой области, это не удалит дочерний элемент, добавленный ранее:

enter image description here

Пример удаления в допустимой области, это удалит дочерний элемент и вызовет событие ChildRemoved:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...