[英]Can't get clicked(date date) signal from Calendar
我是Qt的新手,我想將qml日歷信號clicked(日期日期)連接到cpp slote,如下所示:main.qml:
ApplicationWindow {
title: qsTr("MoneyInTheBank")
visible: true
width: 335
height: 500
color: "#333"
Item{
x: 5
y: 9
width: 325
height: 240
Calendar{
id: calendar
objectName: "calendar"
x: 4
y: 5
width: 318
height: 230
weekNumbersVisible: true
style: CalendarStyle {
gridVisible: false
dayDelegate: Rectangle {
gradient: Gradient {
GradientStop {
position: 0.00
color: styleData.selected ? "#111" : (styleData.visibleMonth && styleData.valid ? "#444" : "#666");
}
GradientStop {
position: 1.00
color: styleData.selected ? "#444" : (styleData.visibleMonth && styleData.valid ? "#111" : "#666");
}
GradientStop {
position: 1.00
color: styleData.selected ? "#777" : (styleData.visibleMonth && styleData.valid ? "#111" : "#666");
}
}
Label {
text: styleData.date.getDate()
anchors.centerIn: parent
color: styleData.valid ? "white" : "grey"
}
Rectangle {
width: parent.width
height: 1
color: "#555"
anchors.bottom: parent.bottom
}
Rectangle {
width: 1
height: parent.height
color: "#555"
anchors.right: parent.right
}
}
}
}
}
}
Calendar.h:
class MyCalendar : public QObject
{
Q_OBJECT
public:
MyCalendar();
public slots:
void ShowShedulerWindow() const;
};
Calendar.cpp
MyCalendar::MyCalendar()
{
}
void MyCalendar::ShowShedulerWindow() const
{
QMessageBox msgBox;
msgBox.setText("Button pushed");
msgBox.exec();
}
main.cpp中
#include "Calendar.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQmlApplicationEngine engine;
QQmlComponent qComponent(&engine,
QUrl(QStringLiteral("qrc:/main.qml")));
QObject *qObject = qComponent.create();
QObject *qobjCalendar = qObject->findChild<QObject*>("calendar");
if(qobjCalendar)
{
MyCalendar *objCalendar = new MyCalendar();
QObject::connect(qobjCalendar, SIGNAL(clicked(QDate)), objCalendar, SLOT(ShowShedulerWindow()));
}
return app.exec();
}
而且我有:QObject :: connect:沒有這樣的信號Calendar.Q \\ Economist \\ main.cpp:24中的Calendar_QMLTYPE_14 :: clicked(QDate)QObject :: connect:(發件人名稱:'calendar')請告訴我我在做什么錯誤?
QML的日期類型“使用具有區域設置的功能擴展了JS Date對象”。 JavaScript Date對象本身代表一個時間點(例如,2014年1月1日10:30:00)。 為了表達這一點,我們需要一個能夠存儲日期和時間的對象。 在Qt中,這是QDateTime 。
因此,您連接到的信號將發出QDateTime
對象:
QObject::connect(qobjCalendar, SIGNAL(clicked(QDateTime)), objCalendar, SLOT(ShowShedulerWindow()));
回答了這個問題之后,我意識到Calendar的信號被記錄為發出“基本” 日期類型,我認為這是不正確的,因為該類型確實等同於QDate
。 某種程度上,您仍然可以將發出基本日期類型的QML信號連接到C ++插槽, QDateTime
是該類型是QDateTime
。 我在這里為錯誤的文檔創建了一個錯誤報告:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.