một lần nữa, tôi có một câu hỏi (và có thể là một vấn đề), tôi làm một chương trình với qt và qml trong qt5 và qml với qtquick 2.0, và tôi có một mô hình C++ qlist, và tôi cần phải sửa đổi các danh sách trong thời gian chạy, tôi sử dụng q QQmlListProperty và hiển thị các mục trong QML, nhưng họ không che giấu và hiển thị trong thời điểm này khi tôi thêm hoặc loại bỏ mã của tôi là tiếp theo:Sử dụng QQmlListProperty để hiển thị và sửa đổi QList trong Qml
class ConceptsList: public QObject{
Q_OBJECT
Q_PROPERTY(QQmlListProperty<Concept> concepts READ concepts NOTIFY conceptsChanged)
Q_CLASSINFO("DefaultProperty", "concepts")
public:
ConceptsList(QObject *parent=0);
QQmlListProperty<Concept> concepts();
Q_INVOKABLE static void append_concept(QQmlListProperty<Concept> *list, Concept *cpt);
Q_INVOKABLE void removeConcept(int index);
Q_INVOKABLE void addConcept(QString m_id,QString description, QString quantity, QString price, QString unit, QString total);
Q_INVOKABLE int countConcepts();
static void clearConcepts(QQmlListProperty<Concept> *property);
static int conceptsSize(QQmlListProperty<Concept> *property);
static Concept *conceptAt(QQmlListProperty<Concept> *property, int index);
signals:
void conceptsChanged();
private:
QList<Concept *> m_concepts;
}
tôi sử dụng một listview và delegate và tôi không có vấn đề gì để xem, nhưng câu hỏi của tôi là nếu tôi có thể sử dụng QQmlListProperty và sửa đổi Qlist, hoặc tôi sẽ thay đổi biểu mẫu để hiển thị qlist thành qml, nếu có thể gọi phương thức từ qml hoặc cách thực hiện trong C++, tôi hỏi vì tồn tại rất ít số hoặc ví dụ với công việc là hình thức. trong QML mã của tôi là tiếp theo:
ConceptsList{
id:cpts
concepts:[
Concept{
m_id:"7"
m_quantity: "3"
m_price: "1"
m_unit:"1"
m_description:"algo"
m_total:"2"
}
]
}
ListView {
id: listConceptsView
objectName: "list"
anchors.fill: parent
anchors.margins: 5
clip: true
focus: true
highlight: highlightBar
highlightFollowsCurrentItem: false
Component{
id: tableConceptDelegate
Item{
anchors.margins: 4
width: 515
height: 27
clip: true
Row {
spacing: 4
Text {
height: 26; width: 76
text: model.m_id
color: "black"
font.bold: true
horizontalAlignment: Text.AlignHCenter
}
...
...
Text {
height: 26; width: 120
text: model.m_total//amountTotal
color: "black"
font.bold: true
horizontalAlignment: Text.AlignHCenter
}
}
MouseArea {
id: mouse_area1
anchors.fill: parent
onClicked:
{
listConceptsView.currentIndex = index
}
}
}
}
delegate: tableConceptDelegate
model:cptCpt // i define this alias how cptCpt: cpt.concepts
}
như nhận xét này chỉ áp dụng khi danh sách tiếp xúc được thay đổi tất cả mọi thời gian (ví dụ danh sách này đã thay đổi tất cả với một http được yêu cầu) hoặc khi là posible tải lại tất cả danh sách mà không có hậu quả cho luồng chương trình. – APRocha
append_concept (danh sách QQmlListProperty *, Khái niệm * cpt) nên ném một lỗi, không nên thuộc loại QQmlListProperty? –