Qtを使用して、リストの要素を数量でフィルタリングしようとしています。フィルターボタンを押しただけで何も起こりません。たぶん、SLOT 関数で何か間違ったことをしているのでしょう。私が使用しているフィルター関数は、Qt を使用していない他のプログラムで完全に機能します。これは、ウィンドウがどのように見えるかです:
http://i.imgur.com/dKbZ50R.png?1 - I uploaded the picture with the windows on imgur because I don't have 10 reputation to upload it from here.
void MedicineManagementGUI::openFilterWindow(){
ui.filterWindow = new QWidget;
uiFilterMedicine.setupUI(ui.filterWindow);
QObject::connect(uiFilterMedicine.btnFilterQuantity,SIGNAL(clicked()),uiFilterMedicine.filterWindow,SLOT(filterAllByQuantity()));
ui.filterWindow->show();
}
フィルタースロット
void MedicineManagementGUI::filterAllByQuantity(){
uiFilterMedicine.medFilterList->clear();
QString quantityQString = uiFilterMedicine.txtQuantity->text();
int quantity = quantityQString.toInt();
List<Medicine*> filtered = ctrl->filterByLessQuantity(quantity);
for(int i=0; i < filtered.size(); i++){
int ID = filtered.getElement(i)->getID();
string name = filtered.getElement(i)->getName();
float concentration = filtered.getElement(i)->getConcentration();
int quantity = filtered.getElement(i)->getQuantity();
QString iDQString = QString::number(ID);
QString nameQString = QString::fromStdString(name);
QString concentrationQString = QString::number(concentration);
QString quantityQString = QString::number(quantity);
QString medicineAsString = iDQString+" - "+nameQString+" - "+concentrationQString+" - "+quantityQString;
QListWidgetItem* item = new QListWidgetItem(medicineAsString, uiFilterMedicine.medFilterList);
item->setData(Qt::UserRole,iDQString);
}
}
フィルタ関数: クラス:
class Filter{
public:
virtual bool include(Medicine* m)=0;
virtual ~Filter(){};
};
class LessThanQuantity: public Filter{
private:
int quantity;
public:
LessThanQuantity(int q){
this->quantity=q;
}
bool include(Medicine* m){
return m->getQuantity()<quantity;
}
};
コントローラーからのフィルター関数:
List<Medicine*> Controller::filterBy(Filter* filter){
List<Medicine*> rez = List<Medicine*>();
List<Medicine*> medList = repo->getAll();
Iterator<Medicine*> it = medList.getIterator();
for(it.first(); it.valid(); it.urmator()){
Medicine* m = it.element();
if(filter->include(m)){
rez.insert(rez.size(),m);
}
}
return rez;
}
List<Medicine*> Controller::filterByLessQuantity(int quantity){
LessThanQuantity* f = new LessThanQuantity(quantity);
return filterBy(f);
}
私はどこで間違っていますか?さらに情報が必要な場合は、教えてください。:)