gpt4 book ai didi

c++ - 在 main() 中全局声明的函数不在 qt widget slot 的范围内

转载 作者:行者123 更新时间:2023-11-30 01:49:08 27 4
gpt4 key购买 nike

我有一个带有按钮的 qt 小部件 GUI,该按钮指示 QMainWindow 中的插槽。这个插槽调用一个在 main() 的 header 中定义的函数,但一旦从插槽中调用它似乎是未定义的。

问题大概是这样的:

#include <required libraries like stdio.h>
#include "window.h"

void testfunc() {printf("I really want to print this");}

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

我的 MainWindow 对象的构造函数基本上看起来像

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_radioButton_pressed()
{
testfunc(); //Error: Not in this scope.
}

我不确定为什么会出现问题。我尝试将 main() 中 #includes 的顺序更改为

但未成功
#include <stdio.h>
void testfunc() {printf("I really want to print this");}
#include "window.h"

问题的发生可能是因为处理 QMainWindow 槽的 'a.exec()' 调用的 QApplication 'a' 在其范围内没有 testfunc()?

另一件奇怪的事情是,我已经在 main() 中 #included 的一些库必须重新包含在 mainwindow.h 中才能被引用。

在 main 中的一个库中也出现了一些“动态链接”,我不确定这是否会导致问题。

这是怎么回事?

如何将函数的范围扩展到插槽?


编辑:好的,我有一个“library.h”,我#include 并在“main.cpp”中使用。这个库有类和函数定义,在“window.h”中定义一个类,在“window.cpp”中定义它的成员函数,在main()中构造这个类的一个对象。

我是否必须在 window.cpp 和/或 window.h 的顶部 #include "library.h"

最佳答案

如果您不包含 void MainWindow::on_radioButton_pressed() 文件,它如何知道 testfunc() 是什么?您需要以某种方式在该文件中包含 testfunc()。一种方法是将 testfunc() 移动到它自己的 header 中,并将其包含在需要的地方。

关于c++ - 在 main() 中全局声明的函数不在 qt widget slot 的范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29517818/

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