私はQtの初心者です。私はQStandardItemModel
をXMLファイルから生成するのに苦労しています。QStandardItemModelを移植する方法
私は以下を試してみましたが、プロジェクト全体が正常に実行されましたが、QtableView
にはデータが表示されません。
はここに私のmain.cpp
です:stockitems.cpp
で
void readXml(const QString& fileName) {
QFile file(fileName);
if(!file.open(QFile::ReadOnly | QFile::Text)) {
qDebug() << "Cannot read file" << file.errorString();
return;
}
StockItems* stockitems = new StockItems;
XmlStockItemsReader xmlReader(stockitems);
if(!xmlReader.read(&file))
qDebug() << "Parse error in file " << xmlReader.errorString();
else {
stockitems->print();
stockitems->populateStockModel();
}
}
int main(int argc, char* argv[]) {
QApplication app(argc, argv);
StockItems si;
//! Change this to match the path of your project
QString path = "C:\\unisa\\cos3711\\FIConcession";
readXml(path + "\\stockitems.xml");
si.show();
return app.exec();
}
I持って次の関数:
void StockItems::populateStockModel() {
foreach(Item* item, m_items) {
QList<QStandardItem*> newRow;
QStandardItem *stockID = new QStandardItem(QString("%1").arg(item->stockID()));
QStandardItem *desc = new QStandardItem(QString("%2").arg(item->desc()));
QStandardItem *price = new QStandardItem(QString("%3").arg(item->price()));
newRow.append(stockID);
newRow.append(desc);
newRow.append(price);
stockModel->appendRow(newRow);
}
}
私はstockID
、desc
とprices
が正しく読み込まれていることを確認することができ、いくつかのデバッグを行う場合は、したがって、問題はstockModel
を更新することによってどこかにあるはずです。次のように
私の主なStockItems
コンストラクタは次のとおりです。
StockItems::StockItems(QWidget *parent) :
QDialog(parent),
ui(new Ui::StockItems)
{
ui->setupUi(this);
stockModel = new QStandardItemModel(0, 3);
// Set Model Headers
stockModel->setHeaderData(0, Qt::Horizontal, "Stock ID", Qt::DisplayRole);
stockModel->setHeaderData(1, Qt::Horizontal, "Description", Qt::DisplayRole);
stockModel->setHeaderData(2, Qt::Horizontal, "Price", Qt::DisplayRole);
// Link Model to Table View
ui->tvStock->setModel(stockModel);
}
私は私が正しくstockModel
を参照していた場合ので、私はちょうどよく分からない期待どおりに動作次onclick
のコードが含まれて追加ボタンを持っています。
QList<QStandardItem*> newRow;
QStandardItem* stockID = new QStandardItem(QString("%1").arg(ui->tbStockId->text()));
QStandardItem* desc = new QStandardItem(QString("%2").arg(ui->tbDesc->text()));
QStandardItem* price = new QStandardItem(QString("%3").arg(ui->sbPrice->text()));
newRow.append(stockID);
newRow.append(desc);
newRow.append(price);
stockModel->appendRow(newRow);
最後に、私はこれが役立つかもしれないと思う、私のstockitems.h
ファイル:
class StockItems : public QDialog
{
Q_OBJECT
public:
explicit StockItems(QWidget *parent = 0);
~StockItems();
void populateStockModel();
void addItem(Item* item);
void print() const;
private slots:
void on_btnAdd_clicked();
void on_btnDelete_clicked();
private:
Ui::StockItems *ui;
QStandardItemModel *stockModel;
QList<Item*> m_items;
};
これはたくさんあると私は何かを提供しなければならないなら、私が知っているが、私は実際にどのようにすると失われていてくださいこのモデルを正しく挿入します。
ありがとうございました!
私の知る限り見るように、これは正しく見えます。私はそれを実装した後、モデルの内容をダンプするデバッグ関数を書くことをお勧めします。列と行の数が予想どおりで、各項目のテキストが正しいことを確認します。テーブルビューの設定で問題が発生している可能性もありますが、それでも問題はありません。 – goug
私は 'stockModel = new QStandardItemModel(0、3);'と言うStockItemsコンストラクタに問題があると思うが、これを変更するたびに...何をすべきかわからない:/ –
私は答えを見ている追加されました。その答えは正しい、私はコードを読んでいたときにそれを逃した。 – goug