gpt4 book ai didi

c++ - 无法从日历中获得点击(日期日期)信号

转载 作者:行者123 更新时间:2023-11-30 03:59:40 24 4
gpt4 key购买 nike

我是 Qt 的新手,我想像这样将 qml Calendar signal clicked(date date) 连接到 cpp slote:主.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
}
}
}
}
}
}

日历.h:

class MyCalendar : public QObject
{
Q_OBJECT
public:
MyCalendar();

public slots:
void ShowShedulerWindow() const;
};

日历.cpp

MyCalendar::MyCalendar()
{
}

void MyCalendar::ShowShedulerWindow() const
{
QMessageBox msgBox;
msgBox.setText("Button pushed");
msgBox.exec();
}

主要.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_QMLTYPE_14::clicked(QDate) in ..\Economist\main.cpp:24QObject::connect: (发件人姓名:'日历')请告诉我做错了什么?

最佳答案

QML 的 Date键入“使用区域设置感知函数扩展 JS Date 对象”。 JavaScript Date object本身代表一个时间点(例如 01/01/2014 10:30:00)。为了在 C++ 中表达这一点,我们需要一个能够存储日期和时间的对象。在 Qt 中,这是 QDateTime .

因此,您连接到的信号发出一个 QDateTime 对象:

QObject::connect(qobjCalendar, SIGNAL(clicked(QDateTime)), objCalendar, SLOT(ShowShedulerWindow()));

回答这个问题后,我意识到 Calendar's signals被记录为发出“基本”date类型,我认为这是不正确的,因为该类型确实等同于 QDate。不知何故,您仍然可以将发出基本日期类型的 QML 信号连接到 C++ 插槽,前提是类型是 QDateTime。我在这里为不正确的文档创建了一个错误报告:

Calendar's signals are documented as emitting the basic date type

关于c++ - 无法从日历中获得点击(日期日期)信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26816864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com