Практически, как гласит заголовок, когда я перетаскиваю элемент из 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](https://i.stack.imgur.com/awV7W.png)
Пример удаления в допустимой области, это удалит дочерний элемент и вызовет событие ChildRemoved:
![enter image description here](https://i.stack.imgur.com/Nsv8S.png)