1

QtアプリケーションGUIに曜日を表すチェックボックスのグループがあり、1つまたは複数の日を選択し、チェックされているボックスに応じて、それらの日に特定のデータを表示するために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(")");
4

1 に答える 1

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 を削除します。

于 2012-09-28T06:55:11.117 に答える