我有一组复选框代表我的Qt应用程序GUI中的一周中的日期,我选择一天或多天,并根据检查的框,将查询字符串传递给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(")");
答案 0 :(得分:2)
您可以在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。