Seite 1 von 1

QTableView Problem beim überprüfen

Verfasst: 11. August 2014 09:12
von Akitochan
Hallo,
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;
			 };
		}
}

Meine Model.cpp :

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();
}

Re: QTableView Problem

Verfasst: 11. August 2014 18:03
von Christian81
Akitochan hat geschrieben: In meinem model/view Programm tritt in meiner Click- Methode der oben genannte Fehler auf.
Ich sehe nirgends eine Fehlermeldung

Re: QTableView Problem

Verfasst: 12. August 2014 08:22
von Akitochan
Oh entschuldige, ich trage es nach.

Re: QTableView Problem beim überprüfen

Verfasst: 12. August 2014 11:29
von Akitochan
Habe meine Lösung schon gefunden :)