Creazione di una semplice cella di tabella in Qt

 C Programming >> Programmazione C >  >> Tags >> Qt
Creazione di una semplice cella di tabella in Qt


Voglio creare una semplice cella di tabella in Qt. Quindi ho scritto il seguente codice


mainwindow.cpp


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTableView>
#include <QSqlQueryModel>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
QTableView *view = new QTableView;
QStringListModel *model;
view->setModel(model);
view->show();
model->setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));
model->setHeaderData(1, Qt::Horizontal, QObject::tr("Name"));
model->setHeaderData(2, Qt::Horizontal, QObject::tr("City"));
model->setHeaderData(3, Qt::Horizontal, QObject::tr("Country"));
}
MainWindow::~MainWindow()
{
delete ui;
}

main.cpp


#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

mainwindow.h


#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

Ma nel file mainwindow.cpp ricevo l'errore che "modello non dichiarato in questo ambito.
Non è in grado di includere l'intestazione QSqlQueryModel nella parte include di mainwindow.cpp.


Qualcuno sa indicarmi dove sbaglio?


Grazie e saluti,
Sid


Risposte:


Penso che tu voglia una tabella multidimensionale, ma QStringListModel è unidimensionale, quindi puoi provare questo codice. Penso che funzioni come vuoi, ottieni intestazioni e puoi impostare i dati nel modello in futuro


     QTableView *view = new QTableView;
QStandardItemModel *mod = new QStandardItemModel;
QStandardItem *it = new QStandardItem(QObject::tr("ID"));
mod->setHorizontalHeaderItem(0,it);
QStandardItem *it1 = new QStandardItem(QObject::tr("Name"));
mod->setHorizontalHeaderItem(1,it1);
QStandardItem *it2 = new QStandardItem(QObject::tr("City"));
mod->setHorizontalHeaderItem(2,it2);
QStandardItem *it3 = new QStandardItem(QObject::tr("Country"));
mod->setHorizontalHeaderItem(3,it3);
//and so on
view->setModel(mod);
view->show();

Sul futuro. Se scrivi QStandardItemModel *mod e dopo questo scrivi mod->setHorizontalHeaderItem() il tuo programma andrà in crash, perché usi un puntatore errato. Dovresti allocare memoria prima di utilizzare


Alcune risposte al codice


#include "mainwindow.h" #include "ui_mainwindow.h" #include <QTableView>
#include <QSqlQueryModel>
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
ui->setupUi(this);
QTableView *view = new QTableView;
QStringListModel *model;
view->setModel(model);
view->show();
model->setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));
model->setHeaderData(1, Qt::Horizontal, QObject::tr("Name"));
model->setHeaderData(2, Qt::Horizontal, QObject::tr("City"));
model->setHeaderData(3, Qt::Horizontal, QObject::tr("Country"));
} MainWindow::~MainWindow() {
delete ui;
}
#include <QtGui/QApplication>
#include "mainwindow.h" int main(int argc, char *argv[]) {
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
#ifndef MAINWINDOW_H #define MAINWINDOW_H  #include <QMainWindow>
namespace Ui {
class MainWindow;
} class MainWindow : public QMainWindow {
Q_OBJECT public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

QTableView *view = new QTableView;
QStandardItemModel *mod = new QStandardItemModel;
QStandardItem *it = new QStandardItem(QObject::tr("ID"));
mod->setHorizontalHeaderItem(0,it);
QStandardItem *it1 = new QStandardItem(QObject::tr("Name"));
mod->setHorizontalHeaderItem(1,it1);
QStandardItem *it2 = new QStandardItem(QObject::tr("City"));
mod->setHorizontalHeaderItem(2,it2);
QStandardItem *it3 = new QStandardItem(QObject::tr("Country"));
mod->setHorizontalHeaderItem(3,it3);
//and so on
view->setModel(mod);
view->show();