QTableView의 데이터를 apache 서버에서 초당 한 번씩 업데이트하는 애플리케이션을 개발 중입니다. 서버는 데이터를 XML 테이블로 보냅니다. 열의 수는 일정하지만 행 수가 매번 변경됩니다. 행의 데이터도 다를 수 있습니다.다른 행 수를 사용하여 QAbstractTableModel에서 데이터를 업데이트하는 방법
XML을 데이터로 변환하려면 TxTableModel (QAbstractTableModel의 하위)에서 사용되는 TxTableData 클래스를 만들었습니다. 또한 TxTableModel은 QTimer를 사용하여 서버의 데이터를 업데이트합니다.
줄 수가 줄면 QTableview가 반응하지 않는 것이 문제입니다. 행 수가 늘어 나면 괜찮습니다.
QTableView에서 모든 행을 제거하고 새 데이터로 채워야하지만 QTableView가이를 수행하지 않아야합니다. 할 수 있습니다
이를 rowCount, 열 개수, 데이터, 사항 setData 등 방법의 구현을 실종대로 TxTableModel 모델의 전체 소스를 제공하지 않는 것 같습니다class TxTableModel : public QAbstractTableModel
{
Q_OBJECT
public:
TxTableModel(QObject *parent = 0);
void refreshData();
void parseXml(const QByteArray &xml);
public slots:
void httpDone(bool error);
void timerDone();
protected:
HttpConnect http;
TxTableData m_Data;
QTimer * timer;
};
TxTableModel::TxTableModel(QObject *parent) :
QAbstractTableModel(parent)
{
timer = new QTimer(this);
connect(&http, SIGNAL(done(bool)), this, SLOT(httpDone(bool)));
connect(timer, SIGNAL(timeout()), this, SLOT(timerDone()));
timer->start(1000);
}
void TxTableModel::refreshData()
{
TxRequest request;
request.setObject("order");
request.setMethod("getlist");
request.addParam("begin_time", 60*60*4);
request.addParam("end_time", 60*4);
http.queryAsync(request);
}
void TxTableModel::parseXml(const QByteArray &xml)
{
//qDebug() << xml;
int count = m_Data.getRowCount();
QXmlInputSource inputSource;
QXmlSimpleReader reader;
TxSaxTableHandler handler(&m_Data, false);
inputSource.setData(xml);
reader.setContentHandler(&handler);
reader.setErrorHandler(&handler);
beginResetModel();
reader.parse(inputSource);
endResetModel();
}
void TxTableModel::httpDone(bool error)
{
if (error) {
qDebug() << http.errorString();
} else {
parseXml(http.readAll());
}
}
void TxTableModel::timerDone()
{
refreshData();
}
이 모델은 명확 했 간주? –