Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 信号与槽Qt_C++_Qt - Fatal编程技术网

C++ 信号与槽Qt

C++ 信号与槽Qt,c++,qt,C++,Qt,我想写一个非常简单的日历程序,我想学习Qt。这个程序本身非常基本,它所做的只是打开一个对话框,显示今天的日期,旁边有一个按钮。当按下按钮时,会打开另一个对话框,我称之为日历选择器 以下是程序的要点:首先,主对话框打开,显示当前日期。然后,当按下图中所示的按钮时,一个信号被发送到一个函数,该函数打开选择器并在两个类之间建立连接,我将在下面描述!将打开选择器,您可以在其中选择日期(如果需要)。假设您通过双击来选择日期。然后向关闭选择器的函数发送信号,然后该函数向主对话框发送信号,将日期更新为新日期。

我想写一个非常简单的日历程序,我想学习Qt。这个程序本身非常基本,它所做的只是打开一个对话框,显示今天的日期,旁边有一个按钮。当按下按钮时,会打开另一个对话框,我称之为日历选择器

以下是程序的要点:首先,主对话框打开,显示当前日期。然后,当按下图中所示的按钮时,一个信号被发送到一个函数,该函数打开选择器并在两个类之间建立连接,我将在下面描述!将打开选择器,您可以在其中选择日期(如果需要)。假设您通过双击来选择日期。然后向关闭选择器的函数发送信号,然后该函数向主对话框发送信号,将日期更新为新日期。现在问题来了:

主对话框和选择器都在不同的类中,我试图在双击一个项目时在这两个类之间建立连接

***编辑:好的,现在我的问题是我在头文件中声明了Picker*mypicker,当我尝试在.cpp文件中使用它时,例如mypicker->show;它会导致程序崩溃。有人知道为什么吗

任何帮助都将不胜感激

对MainDialog::updateDateQDate的未定义引用

通常意味着编译器或链接器找不到对它的引用。因此,在标题中,您承诺它将存在

然后,如果以后匹配时没有找到引用。。。你会得到一个错误

因此,可能发生的是以下几件事之一:

在maindialog.cpp文件中,您有:

// Either no definition of updateDate at all,  Wrong because you put in your header a declaration for one.

void updateDate(QDate date) // Wrong because it doesn't specify MainDialog
{

}


void MainDialog::updateDate() // Wrong because it doesn't match the parameter list
{

}

void MainDialog::updatedate(QDate date) // Wrong because the function name is off
{

}

QDate MainDialog::updateDate(QDate date) // Wrong because return type is off
{

}

void MainDialog::updateDate(QDate date) // Correct!  Matches the header file perfectly!
{

}
然后,在克服这些错误和其他编译错误之后,请密切关注应用程序输出,因为connect调用是一个运行时连接,所以在尝试连接之前,它不会报告语法错误


希望这能有所帮助。

非常感谢您为所有的案例所做的一切。它帮助我解决了我的问题。你觉得你能帮我做一件小事吗。我在头文件中声明了一个指针。没有什么特别的,只是声明为Picker*Picker。然而,当我试着去做一些事情,比如picker->show;或者尝试在.cpp文件中连接,就像我在上面所做的那样,程序崩溃。你认为你知道为什么会这样吗?指针只是一个内存地址。堆上没有分配对象的内存地址毫无价值。它们为空,访问它们会导致错误。您需要调用picker=new picker;在任何一行代码访问它之前,最好将构造函数顶部的所有指针设置为零,然后在访问它们之前,可以使用ifpicker检查它们是否为非零。调用new并将内存分配给该位置后,该位置不再为零,ifpicker将返回true。