Выбор дня (дней) из флажка QT в Postgresql

У меня есть группа флажков, представляющих дни недели в моем графическом интерфейсе приложения Qt, и я выбираю один или несколько дней и, в зависимости от того, какие флажки установлены, передаю строку запроса в PostgreSQL для отображения определенных данных в эти дни — например, если я проверил понедельник и среду, extract (dow from timestamp) = 1 or extract(dow from timestamp) = 3 должен быть добавлен к моему запросу. Я только что набрал грубое решение — хотя еще не тестировал, когда пишу это, — но мне было интересно, есть ли более короткий и более элегантный подход, который я здесь упускаю. Код, как показано ниже: queryAdditionCalltimePart а также queryAdditionCallStampPart Строки позже добавляются в соответствующие части моего основного запроса QString перед выполнением основного запроса

bool checkboxArray[7];
bool mult = false;
checkboxArray[0] = this->ui->checkBoxMonday->isChecked();
checkboxArray[1] = this->ui->checkBoxTuesday->isChecked();
checkboxArray[2] = this->ui->checkBoxWednesday->isChecked();
checkboxArray[3] = this->ui->checkBoxThursday->isChecked();
checkboxArray[4] = this->ui->checkBoxFriday->isChecked();
checkboxArray[5] = this->ui->checkBoxSaturday->isChecked();
checkboxArray[6] = this->ui->checkBoxSunday->isChecked();
QString queryAdditionCalltimePart = "";
QString queryAdditionCalStampPart = "";
int count = 0;

queryAdditionCalltimePart.append("(");
queryAdditionCalStampPart.append("(");
for(int i = 0; i < 7; i++)
{
if(checkboxArray[i] == true)
{
count++;
}
}int x = 0;

for(int i = 0; i < 7; i++)
{
if(checkboxArray[i] == true)
{
queryAdditionCalltimePart.append("(SELECT EXTRACT(DOW FROM calltime) = '" +QString::number(i+1)+"')");
queryAdditionCalStampPart.append("(SELECT EXTRACT(DOW FROM cal.stamp) = '" +QString::number(i+1)+"')");

}

if(count > 1 && checkboxArray[i] == true)
{
if(x == count - 1)
{
}
else
{
queryAdditionCalltimePart.append("OR");
queryAdditionCalStampPart.append("OR");
x++;
}
}
}queryAdditionCalltimePart.append(")");
queryAdditionCalStampPart.append(")");

1

Решение

Вы можете добавить свойства к любому виджету в Qt, http://qt-project.org/doc/qt-4.8/qobject.html#setProperty. Недвижимость может иметь любую информацию, которую вы хотите.

В вашем конкретном случае было бы лучше прикрепить строку SQL в качестве свойства для каждого флажка.

this->ui->checkBoxMonday->setProperty("sql",
"(SELECT EXTRACT(DOW FROM calltime) = '" +QString::number(i+1)+"') OR ";

Получив пользовательский ввод, просто добавьте свойства флажка и удалите окончательное ИЛИ.

2

Другие решения

Других решений пока нет …