我的 Qt 应用程序 GUI 中有一组复选框代表一周中的几天,我选择一天或多天,然后根据选中的复选框,将查询字符串传递给 PostgreSQL 以显示这些日期的某些数据天-例如如果我检查星期一和星期三,extract (dow from timestamp) = 1 或 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(")");
最佳答案
您可以向 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。
关于c++ - 从 QT 复选框到 Postgresql 的星期选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12632667/