从 QT 复选框到 Postgresql 选择星期几

Day(s) of week selection from QT checkbox to Postgresql

本文关键字:选择 Postgresql QT 复选框      更新时间:2023-10-16

我在Qt应用程序GUI中有一组代表一周中几天的复选框,我选择一天或多天,并根据选中的框,将查询字符串传递给PostgreSQL以显示这些日子的某些数据 - 例如,如果我检查星期一和星期三,则应将extract (dow from timestamp) = 1 or extract(dow from timestamp) = 3添加到我的查询中。我刚刚输入了一个粗略的解决方案 - 虽然在我写这篇文章时还没有测试过 - 但我想知道是否有一种更短 - 更优雅 - 的方法,我在这里错过了。代码如下: -在执行主查询之前,稍后将queryAdditionCalltimePartqueryAdditionCallStampPart字符串添加到我的主查询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(")");

您可以在 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 ";

收到用户输入后,只需附加复选框属性并删除最终的 OR。