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

独自空忆成欢 提交于 2019-12-24 07:59:56

问题


I have a group of checkboxes representing the days of a week in my Qt application GUI and I select one or many days, and depending on which boxes are checked, pass a query string to PostgreSQL in order to display certain data on those days -e.g. if I checked monday and wednesday, extract (dow from timestamp) = 1 or extract(dow from timestamp) = 3 should be added to my query. I have just typed a crude solution -though haven't tested yet as I write this-, but I was wondering if there is a shorter -and more elegant- approach that I'm missing out here. The code is as below: -the queryAdditionCalltimePart and queryAdditionCallStampPart strings are later added to the relevant parts of my main query's QString before the main query is executed-

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:


You can add properties to any widget in Qt, http://qt-project.org/doc/qt-4.8/qobject.html#setProperty. The property can have any information that you want.

In your particular case, it would be cleaner to attach the SQL string as a property for each checkbox.

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

Once you receive the user input, simply append the check box properties and remove the final OR.



来源:https://stackoverflow.com/questions/12632667/days-of-week-selection-from-qt-checkbox-to-postgresql

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!