簡體   English   中英

無法從日歷獲得點擊(日期日期)信號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM