QTableView Problem beim überprüfen

Alles rund um die Programmierung mit Qt
Antworten
Akitochan
Beiträge: 5
Registriert: 5. August 2014 11:17

QTableView Problem beim überprüfen

Beitrag 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();
}
Zuletzt geändert von Akitochan am 12. August 2014 10:39, insgesamt 4-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QTableView Problem

Beitrag 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
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Akitochan
Beiträge: 5
Registriert: 5. August 2014 11:17

Re: QTableView Problem

Beitrag von Akitochan »

Oh entschuldige, ich trage es nach.
Akitochan
Beiträge: 5
Registriert: 5. August 2014 11:17

Re: QTableView Problem beim überprüfen

Beitrag von Akitochan »

Habe meine Lösung schon gefunden :)
Antworten