QSqlQueryModel in Gui verschieben

Alles rund um die Programmierung mit Qt
Antworten
Jannilein
Beiträge: 19
Registriert: 13. Juni 2014 13:38

QSqlQueryModel in Gui verschieben

Beitrag von Jannilein »

Hallo,
ich würde gerne wissen wie ich mein QSqlQueryModel bzw dessen Ergebnisse in meinem Gui- Fenster verschieben kann.
Momentan ist es ganz oben in dem Fenster, gerne würde ich aber einen Button darüber machen ( ohne das etwas verdeckt wird ) mit dem man dann die Liste updaten kann, sobalt man drauf drückt. In einem QVBoxLayout kann man ja leider keine ganze view einfügen und ich weiß nicht wie ich da sonst alleine das model einfüge.
Momentan sieht die Methode so aus:

Code: Alles auswählen

{	 this->setGeometry(500,500,400,350);
 	 database = QSqlDatabase::addDatabase("QMYSQL", "conn1");
 	 database.setHostName("127.0.0.1");
 	 database.setPort(3306);
 	 database.setDatabaseName( "mydb" );
 	 database.setUserName("root");
 	 database.setPassword("Schatzi261213");
 	 returnvalue  = database.open();
 	 cout<<returnvalue<<endl;
	 QSqlQueryModel *model = new QSqlQueryModel;

	 if(database.isOpen()== true)
	  {
		 	model->setQuery("SELECT id, Nachname, Vorname, Ort FROM testtable", database);
		 	model->setHeaderData(1, Qt::Horizontal, tr("Salary"));
	  }
	 QTableView *view = new QTableView;
	 QPushButton* btnaddtotable = new QPushButton( "Load",view);
	 btnaddtotable->setGeometry(70,20,300,40);
	view->setModel(model);
	view->setGeometry(500,500,400,400);
	view->show();
}
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Re: QSqlQueryModel in Gui verschieben

Beitrag von MichaelS »

n einem QVBoxLayout kann man ja leider keine ganze view einfügen und ich weiß nicht wie ich da sonst alleine das model einfüge.
Du kannst jedes beliebige von QWidget abgeleitete Objekt zu einem QVBoxLayout hinzufügen - also auch ein QTableView-Objekt.

Warum erstellst Du den Dialog nicht mit den Qt-Designer? Es ist einfacher, macht Deinen Code übersichtlicher und er sorgt auch dafür, dass Deine GUI-Elemente einen Parent zugewiesen bekommen (und vermeidet somit Memoy-Leaks).

Einen weiteren Hinweis noch:

Code: Alles auswählen

 database = QSqlDatabase::addDatabase("QMYSQL", "conn1");
Da Du wahrscheinlich ohnehin nur eine Datenbankverbindung verwendest, kannst Du den Verbindungsnamen auch weglassen:

Code: Alles auswählen

 database = QSqlDatabase::addDatabase("QMYSQL");
Qt erzeugt dann eine Standard-Datenbankverbindung, auf die sich dann künftig alle SQL-Statements beziehen, so dass Du nicht jedesmal das QSqlDatabase-Objekt mitgeben musst:

Code: Alles auswählen

setQuery("SELECT id, Nachname, Vorname, Ort FROM testtable");
Jannilein
Beiträge: 19
Registriert: 13. Juni 2014 13:38

Re: QSqlQueryModel in Gui verschieben

Beitrag von Jannilein »

Danke,
magst du mir villeicht helfen ?
Mein Gui- Fenster schließt sich immer, sobald ich auf einen der Buttons klicke.

Code: Alles auswählen

void Tester::UpdateButtonClicked()
{
	if(database.isOpen()== true)
	{
		model->setQuery("UPDATE id, Nachname, Vorname, Ort SET testtable");
	}
	view->setModel(model);
}
void Tester::InsertButtonClicked()
{
	if(database.isOpen()== true)
	{
		model->setQuery("INSERT INTO testtable (Nachname, Vorname, Ort) VALUES ('Lala', 'LuLu', 'Dudu')");
	}
	view->setModel(model);
}

Code: Alles auswählen

void Tester::init()
{	QSqlQueryModel *model = new QSqlQueryModel;
	view = new QTableView;
	QPushButton* btnUpdate = new QPushButton( "UPDATE",view);
	QPushButton* btnInsert = new QPushButton( "INSERT",view);
	QVBoxLayout *layout = new QVBoxLayout;
	this->setGeometry(500,500,400,350);
	btnUpdate->setGeometry(70,20,300,40);
	btnInsert->setGeometry(70,20,300,40);
	view->setModel(model);

	database = QSqlDatabase::addDatabase("QMYSQL");
	database.setHostName("127.0.0.1");
	database.setPort(3306);
	database.setDatabaseName( "mydb" );
	database.setUserName("root");
	database.setPassword("Schatzi261213");
	returnvalue  = database.open();
	cout<<returnvalue<<endl;

	if(database.isOpen()== true)
	{
		model->setQuery("SELECT id, Nachname, Vorname, Ort FROM testtable");
	}
	model->setHeaderData(0, Qt::Horizontal, tr("ID"));
	model->setHeaderData(1, Qt::Horizontal, tr("Nachnamme"));
	model->setHeaderData(2, Qt::Horizontal, tr("Vorname"));
	model->setHeaderData(3, Qt::Horizontal, tr("Ort"));
	model->setParent(this);

	layout->addWidget(btnUpdate);
	layout->addWidget(btnInsert);
	layout->addWidget(view);
	this->setLayout(layout);
	view->setGeometry(500,500,400,400);

	QObject::connect ( btnUpdate, SIGNAL ( clicked() ), this , SLOT(UpdateButtonClicked())) ;
	QObject::connect ( btnInsert, SIGNAL ( clicked() ), this , SLOT(InsertButtonClicked())) ;
	
	view->show();
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Re: QSqlQueryModel in Gui verschieben

Beitrag von MichaelS »

Wenn ein Programm abstürzt, ist der Debugger das Tool der Wahl. Da der Dich direkt an die Absturzstelle bringt, erleichtert das die Suche nach dem Fehler ungemein.
Antworten