В продолжение темы...
Добавление строки фильтра я сделал.
Теперь удаление строки фильтра
Вот код указанного ранее слота slot_SelectFilterColumn
void Limit::slot_SelectFilterColumn(QString ColumnName)
{
if (sender()->objectName().toInt() == iCountLimitLines-1)
AddLimitLine();
if (ColumnName == "")
{
QComboBox* cmb_ = (QComboBox*) this->findChild<QComboBox*>("ComboType" + QString::number(sender()->objectName().toInt()));
cmb_->clear();
//QMessageBox::about(0, sender()->objectName(), sender()->objectName());
DeleteLimitLine(sender()->objectName().toInt()+1);
return;
}
QComboBox* cmb = (QComboBox*) this->findChild<QComboBox*>("ComboType" + sender()->objectName());
if (cmb==NULL)
return;
cmb->clear();
cmb->addItem("Равно");
cmb->addItem("Не равно");
cmb->addItem("Больше");
cmb->addItem("Меньше");
QSqlRecord rec = p_SqlModel->record(1);
if (rec.field(ColumnName).type() == QVariant::DateTime)
cmb->addItem("Между");
else if (rec.field(ColumnName).type() == QVariant::String)
{
cmb->addItem("Содержит");
cmb->addItem("Не содержит");
}
}
Здесь при выборе пустого элемента для фильтрации должна удаляться следующая строка фильтра - функция DeleteLimitLine, в которую передается номер текущей строки фильтра + 1
Сама функция вот
void Limit::DeleteLimitLine(int iIndex)
{
QLayoutItem* f = p_GridLayout->itemAtPosition(iIndex, 0);
int iCount = f->layout()->count();
for (int i = 0; i < iCount; i++)
{
QWidget* p_wgt = f->layout()->itemAt(0)->widget();
f->layout()->removeWidget(p_wgt);
p_wgt->close();
delete p_wgt;
}
p_GridLayout->removeItem(f);
delete f;
p_GridLayout->setSizeConstraint(QLayout::SetMinimumSize);
this->resize(p_GridLayout->sizeHint().width(), p_GridLayout->sizeHint().height());
iCountLimitLines--;
}
Т.е. получаем QLayoutItem - Layout строки фильтра по индексу.
Смотрим количество виджетов в этом Layout и удаляем каждый
Далее удаляем сам Layout.
Удаление проходит нормально. Только проблема в том что после удаления не перестраивается размер диалога. Точнее он перестраивается, но криво. Такое ощущение что в нем есть еще одна как бы невидимая строка - размер как раз подходит. Но строки нет.
Но.
Если до строки
p_GridLayout->setSizeConstraint(QLayout::SetMinimumSize);
Выводить сообщение (любое) QMessageBox
То диалог нормально перестраивается.
Причем это поэтапно выглядит так
1. Удаляются виджеты и Layout
2. Размер формы перестраивается как будто с еще одной строкой, которой нет
3. Показывается сообщение
4. Размер формы перестраивается идеально
Подскажите пожалуйста, почему такое может быть?