我是Qt的初學者,我正努力從XML文件填充QStandardItemModel
。如何填充QStandardItemModel
我試過以下,整個項目運行成功,但QtableView
不顯示數據。
這裏是我的main.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();
}
在stockitems.cpp
我有以下功能:
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);
}
我有一個添加按鈕,包含以下onclick
代碼按預期工作,所以我只是不知道如果我正確地引用stockModel
。
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
我認爲這個問題可能出現在StockItems構造函數中,我說'stockModel = new QStandardItemModel(0,3);'但是每當我改變它它就會中斷...不知道該怎麼辦:/ –
我看到答案是添加。這個答案是正確的,當我讀代碼的時候我錯過了。 – goug