Skip to content

Commit

Permalink
fix(model): cannot render in time in QML
Browse files Browse the repository at this point in the history
  • Loading branch information
Serein207 committed Nov 27, 2023
1 parent 03cf8b6 commit 9f7a0ed
Show file tree
Hide file tree
Showing 15 changed files with 99 additions and 46 deletions.
1 change: 1 addition & 0 deletions qml/page/T_Plaza.qml
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ FluScrollablePage {
Rectangle {
height: 40
width: parent.width
radius: 10
anchors.bottom: parent.bottom
color: "#33000000"

Expand Down
6 changes: 3 additions & 3 deletions qml/page/T_Schedule.qml
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,12 @@ FluScrollablePage {

function loadScheduleInfo(){
if (pivot.currentIndex === 0) {
loadRegisteredScheduleInfo()
loadRegisteredScheduleInfo()
}
else if (pivot.currentIndex === 1) {
loadSubscribedScheduleInfo()
}
pivot.implicitHeight = Qt.binding(()=>ScheduleController.width)
}

Component.onCompleted: {
Expand Down Expand Up @@ -88,8 +89,7 @@ FluScrollablePage {
}

FluPivot {
id: pivot
Layout.fillWidth: true
id: pivot
currentIndex: 0

FluPivotItem {
Expand Down
1 change: 1 addition & 0 deletions qml/window/MainWindow.qml
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ nav_view.push("qrc:/qml/page/T_My.qml")}}', items_footer)
id: nav_view
width: parent.width
height: parent.height
cellWidth: 200
z: 999
pageMode: FluNavigationViewType.NoStack
items: items_original
Expand Down
30 changes: 14 additions & 16 deletions src/controller/evento_service.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -121,17 +121,18 @@ void EventoService::load_RegisteredSchedule() {
std::vector<Schedule> model(multiDayEvents.begin(), multiDayEvents.end());
model.insert(model.end(), singleDayEvents.begin(), singleDayEvents.end());
std::set<QString> dateSet;
std::for_each(model.begin(), model.end(), [&dateSet](Schedule& e) {
int width = 110;
std::for_each(model.begin(), model.end(), [&dateSet, &width](Schedule& e) {
auto size = dateSet.size();
dateSet.insert(e.date);
if (dateSet.size() == size) {
e.hasSameDate = true;
width += 20;
}
width += 90;
});
QMetaObject::invokeMethod(
ScheduledEventoModel::getInstance(),
[&]() { ScheduledEventoModel::getInstance()->resetModel(std::move(model)); },
Qt::BlockingQueuedConnection);
ScheduleController::getInstance()->setProperty("width", width);
ScheduledEventoModel::getInstance()->resetModel(std::move(model));
ScheduleController::getInstance()->onLoadSubscribedFinished();
});
}
Expand Down Expand Up @@ -175,17 +176,18 @@ void EventoService::load_SubscribedSchedule() {
std::vector<Schedule> model(multiDayEvents.begin(), multiDayEvents.end());
model.insert(model.end(), singleDayEvents.begin(), singleDayEvents.end());
std::set<QString> dateSet;
std::for_each(model.begin(), model.end(), [&dateSet](Schedule& e) {
int width = 110;
std::for_each(model.begin(), model.end(), [&dateSet, &width](Schedule& e) {
auto size = dateSet.size();
dateSet.insert(e.date);
if (dateSet.size() == size) {
e.hasSameDate = true;
}
width += 90;
} else
width += 110;
});
QMetaObject::invokeMethod(
ScheduledEventoModel::getInstance(),
[&]() { ScheduledEventoModel::getInstance()->resetModel(std::move(model)); },
Qt::BlockingQueuedConnection);
ScheduleController::getInstance()->setProperty("width", width);
ScheduledEventoModel::getInstance()->resetModel(std::move(model));
ScheduleController::getInstance()->onLoadSubscribedFinished();
});
}
Expand All @@ -210,11 +212,7 @@ void EventoService::load_DepartmentEvents(int departmentId) {
stored[i.id] = std::move(i);
}
}
QMetaObject::invokeMethod(
EventoBriefModel::getInstance(),
[&]() { EventoBriefModel::getInstance()->resetModel(std::move(model)); },
Qt::BlockingQueuedConnection);

EventoBriefModel::getInstance()->resetModel(std::move(model));
DepartmentEventsController::getInstance()->onLoadDepartmentEventFinished();
});
}
Expand Down
7 changes: 7 additions & 0 deletions src/controller/ui/schedule.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ class ScheduleController : public QObject {
QML_NAMED_ELEMENT(ScheduleController)
QML_SINGLETON

Q_PROPERTY(int width MEMBER m_width NOTIFY widthChanged)

public:
Q_INVOKABLE void loadRegisteredSchedule();
Q_INVOKABLE void loadSubscribedSchedule();
Expand All @@ -28,6 +30,8 @@ class ScheduleController : public QObject {
private:
ScheduleController() = default;

int m_width;

public:
void onLoadRegisteredFinished() {
emit loadRegisteredScheduleSuccessEvent();
Expand All @@ -51,6 +55,9 @@ class ScheduleController : public QObject {
public:
static ScheduleController* getInstance();
static ScheduleController* create(QQmlEngine* qmlEngine, QJSEngine* jsEngine);

signals:
void widthChanged();
};

#endif // SCHEDULE_CONTROLLER_H
11 changes: 8 additions & 3 deletions src/domain/model/department_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,14 @@ QHash<int, QByteArray> DepartmentModel::roleNames() const {
}

void DepartmentModel::resetModel(std::vector<Department>&& model) {
beginResetModel();
m_data = std::move(model);
endResetModel();
QMetaObject::invokeMethod(
this,
[&]() {
beginResetModel();
m_data = std::move(model);
endResetModel();
},
Qt::BlockingQueuedConnection);
}

DepartmentModel* DepartmentModel::create(QQmlEngine* qmlEngine, QJSEngine* jsEngine) {
Expand Down
11 changes: 8 additions & 3 deletions src/domain/model/evento_block_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,14 @@ QHash<int, QByteArray> EventoBlockModel::roleNames() const {
}

void EventoBlockModel::resetModel(std::vector<EventoBlock>&& model) {
beginResetModel();
m_data = std::move(model);
endResetModel();
QMetaObject::invokeMethod(
this,
[&]() {
beginResetModel();
m_data = std::move(model);
endResetModel();
},
Qt::BlockingQueuedConnection);
}

EventoBlockModel* EventoBlockModel::create(QQmlEngine* qmlEngine, QJSEngine* jsEngine) {
Expand Down
11 changes: 8 additions & 3 deletions src/domain/model/evento_brief_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,14 @@ QHash<int, QByteArray> EventoBriefModel::roleNames() const {
}

void EventoBriefModel::resetModel(std::vector<EventoBrief>&& model) {
beginResetModel();
m_data = std::move(model);
endResetModel();
QMetaObject::invokeMethod(
this,
[&]() {
beginResetModel();
m_data = std::move(model);
endResetModel();
},
Qt::BlockingQueuedConnection);
}

EventoBriefModel* EventoBriefModel::create(QQmlEngine* qmlEngine, QJSEngine* jsEngine) {
Expand Down
11 changes: 8 additions & 3 deletions src/domain/model/feedback_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,14 @@ QHash<int, QByteArray> FeedbackModel::roleNames() const {
}

void FeedbackModel::resetModel(std::vector<Feedback>&& model) {
beginResetModel();
m_data = std::move(model);
endResetModel();
QMetaObject::invokeMethod(
this,
[&]() {
beginResetModel();
m_data = std::move(model);
endResetModel();
},
Qt::BlockingQueuedConnection);
}

FeedbackModel* FeedbackModel::create(QQmlEngine* qmlEngine, QJSEngine* jsEngine) {
Expand Down
11 changes: 8 additions & 3 deletions src/domain/model/feedback_num_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,12 @@ QHash<int, QByteArray> FeedbackNumModel::roleNames() const {
}

void FeedbackNumModel::resetModel(std::vector<FeedbackNum>&& model) {
beginResetModel();
m_data = std::move(model);
endResetModel();
QMetaObject::invokeMethod(
this,
[&]() {
beginResetModel();
m_data = std::move(model);
endResetModel();
},
Qt::BlockingQueuedConnection);
}
11 changes: 8 additions & 3 deletions src/domain/model/latest_evento_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,14 @@ QHash<int, QByteArray> LatestEventoModel::roleNames() const {
}

void LatestEventoModel::resetModel(std::vector<LatestEvento>&& model) {
beginResetModel();
m_data = std::move(model);
endResetModel();
QMetaObject::invokeMethod(
this,
[&]() {
beginResetModel();
m_data = std::move(model);
endResetModel();
},
Qt::BlockingQueuedConnection);
}

LatestEventoModel* LatestEventoModel::create(QQmlEngine* qmlEngine, QJSEngine* jsEngine) {
Expand Down
11 changes: 8 additions & 3 deletions src/domain/model/scheduled_evento_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,14 @@ QHash<int, QByteArray> ScheduledEventoModel::roleNames() const {
}

void ScheduledEventoModel::resetModel(std::vector<Schedule>&& model) {
beginResetModel();
m_data = std::move(model);
endResetModel();
QMetaObject::invokeMethod(
this,
[&]() {
beginResetModel();
m_data = std::move(model);
endResetModel();
},
Qt::BlockingQueuedConnection);
}

ScheduledEventoModel* ScheduledEventoModel::create(QQmlEngine* qmlEngine, QJSEngine* jsEngine) {
Expand Down
1 change: 1 addition & 0 deletions src/domain/model/slide_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ void SlideModel::resetModel(const QStringList& slideList) {
beginResetModel();
m_data = std::move(model);
endResetModel();

}

void SlideModel::removeById(const int id) {
Expand Down
11 changes: 8 additions & 3 deletions src/domain/model/undertaking_evento_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,14 @@ QHash<int, QByteArray> UndertakingEventoModel::roleNames() const {
}

void UndertakingEventoModel::resetModel(std::vector<UndertakingEvento>&& model) {
beginResetModel();
m_data = std::move(model);
endResetModel();
QMetaObject::invokeMethod(
this,
[&]() {
beginResetModel();
m_data = std::move(model);
endResetModel();
},
Qt::BlockingQueuedConnection);
}

UndertakingEventoModel* UndertakingEventoModel::create(QQmlEngine* qmlEngine, QJSEngine* jsEngine) {
Expand Down
11 changes: 8 additions & 3 deletions src/domain/model/user_brief_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,14 @@ QHash<int, QByteArray> UserBriefModel::roleNames() const {
}

void UserBriefModel::resetModel(std::vector<UserBrief>&& model) {
beginResetModel();
m_data = std::move(model);
endResetModel();
QMetaObject::invokeMethod(
this,
[&]() {
beginResetModel();
m_data = std::move(model);
endResetModel();
},
Qt::BlockingQueuedConnection);
}

UserBriefModel* UserBriefModel::create(QQmlEngine* qmlEngine, QJSEngine* jsEngine) {
Expand Down

0 comments on commit 9f7a0ed

Please sign in to comment.