Ich würde gerne wissen ob ihr mir weiterhelfen könnt.
Ich würde gerne wissen ob es eine Möglichkeit gibt, das er nur nach ganzen Wörtern schaut. wenn ich nun "Wer" in der Tabelle stehen habe, sagt er mir bei "W" das es bereits in der Tabelle existiert.
Meine View.cpp :
Code: Alles auswählen
void View::init()
{
meinModel= new Model();
QTableView *meineView=new QTableView( this );
meineView->setModel(meinModel);
QWidget *mywidget= new QWidget(this);
QPushButton* btnaddtotable = new QPushButton( "Add to Table",this);
btnaddtotable->setGeometry(50,20,100,40);
QObject::connect ( btnaddtotable, SIGNAL ( clicked() ), this , SLOT(pushButtonClicked())) ;
meineView->setObjectName(QStringLiteral("Tabelle"));
meineView->setGeometry(QRect(20, 100, 361, 191));
txtname = new QLineEdit(mywidget);
txtname->setObjectName(QStringLiteral("txtname"));
txtname->setGeometry(QRect(20, 30, 151, 31));
txtvalue = new QLineEdit(mywidget);
txtvalue->setObjectName(QStringLiteral("textEdit"));
txtvalue->setGeometry(QRect(230, 30, 151, 31));
label = new QLabel ("Name: ", mywidget );
label->setObjectName(QStringLiteral("label"));
label->setGeometry(QRect(20, 10, 61, 20));
label_2 = new QLabel ("Value ", mywidget );
label_2->setObjectName(QStringLiteral("label_2"));
label_2->setGeometry(QRect(235, 10, 51, 20));
btnaddtotable->setObjectName(QStringLiteral("pushButton"));
btnaddtotable->setGeometry(QRect(160, 70, 75, 23));
this->setGeometry(500,500,400,350);
// zum sortieren
sort_filter = new QSortFilterProxyModel(this);
sort_filter->setSourceModel(meinModel);
//sortiert die erste reihe
sort_filter->sort (0);
meineView->setModel (sort_filter);
//zum überprüfen ob vorhanden
sort_filter->setSourceModel(meinModel);
}
void View::pushButtonClicked()
{ QMessageBox msb;
//sort_filter->setFilterFixedString(txtname->text());
QModelIndexList indexes = meinModel->match(meinModel->index(0,0), Qt::DisplayRole,QVariant::fromValue(txtname->text()) );
if (indexes.size() == 0 )
{
this->setSortingEnabled(false);
meinModel->setData(txtname->text(),txtvalue->text());
this->setSortingEnabled(true);
} else
{
msb.setText( " ' "+ txtname->text() + " ' "+ " alredy exist");
msb.setInformativeText("Do you want to add it ?");
msb.setStandardButtons(QMessageBox::Save | QMessageBox::Discard );
int ret = msb.exec();
switch (ret)
{
case QMessageBox::Save:
this->sort_filter->invalidate();
this->setSortingEnabled(false);
meinModel->setData(txtname->text(),txtvalue->text());
this->setSortingEnabled(true);
break;
case QMessageBox::Discard:
this->sort_filter->invalidate();
txtname->clear();
txtvalue->clear();
break;
};
}
}
Code: Alles auswählen
bool Model::setData(QString name,QString value )
{
beginInsertRows(QModelIndex(), names.size(), names.size());
names.push_back(name);
values.push_back(value);
endInsertRows();
qDebug() << "inhalt name:"<< name;
qDebug() << "inhalt value:"<< name;
std::cout << names.size() << std::endl;
QModelIndex topLeft = createIndex(0,0);
QModelIndex bottomRights = createIndex(names.size()-1,1);
//emit a signal to make the view reread identified data
emit dataChanged(topLeft, bottomRights);
return true;
}
QVariant Model::data(const QModelIndex &index, int role) const
{
std::cout << "data" << std::endl;
if (role == Qt::DisplayRole)
{
QString returnValue;
if(0 == index.column())
{
returnValue = names.at(index.row());
}
else if (1 == index.column())
{
returnValue = values.at(index.row());
}
else
{
//column does not exist
}
return returnValue;
} else
{
return QVariant();
}
}
int Model::rowCount(const QModelIndex & parent) const
{
std::cout << "rowCount" << std::endl;
Q_UNUSED( parent );
return names.size();
}
int Model::columnCount(const QModelIndex & parent ) const
{
std::cout << "columnCount" << std::endl;
Q_UNUSED( parent );
return 2;
}
QVariant Model::headerData(int section, Qt::Orientation orientation, int role) const
{
if (role == Qt::DisplayRole)
{
if (orientation == Qt::Horizontal) {
switch (section)
{
case 0:
return QString("name");
case 1:
return QString("value");
}
}
}
return QVariant();
}