У меня есть графический интерфейс виджета qt с кнопкой, которая сигнализирует о слоте в QMainWindow. Этот слот вызывает функцию, которая определена в заголовке main(), но, по-видимому, не определена после ее вызова из слота.функция объявлена глобально в main() не входит в объем виджета qt
Грубо говоря, проблема, как это: конструктор
#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.
}
Я не знаю, почему возникает проблема. Я попытался неудачно изменив порядок директив #includes в основной() для
#include <stdio.h>
void testfunc() {printf("I really want to print this");}
#include "window.h"
Возможно, проблема возникает потому, что QApplication «а», который вызывается 'a.exec(), который обрабатывает слот QMainWindow в не имеет testfunc() в своей области?
Еще одна странная вещь - некоторые библиотеки, которые у меня есть #, включенные уже в main(), должны быть повторно включены в mainwindow.h для ссылки.
Существует также некоторое «Динамическое связывание», происходящее в одной из основных библиотек, я не уверен, что это вызывает проблемы.
Что происходит?
Как расширить область действия функции до слота?
редактировать: Хорошо, у меня есть "library.h" Я #include и использовать в "main.cpp". Эта библиотека имеет определения классов и функций, которые используют определение класса в «window.h» и его функции-члены в «window.cpp», а объект этого класса построен в main().
Нужно ли мне #include "library.h"
в верхней части window.cpp и/или window.h?
Система заголовка очень примитивна - '#include" file "' only означает "вставить содержимое файла 'file' прямо здесь". Он не влияет на файлы, кроме тех, где он встречается. – molbdnilo
Итак, у меня есть два файла .cpp. «main.cpp» и «window.cpp», а также файл «window.h», где «окно» - это класс. Я создаю объект window в main(). Я хочу использовать те же библиотеки во всех этих трех файлах. Нужно ли # включать библиотеки во все три или только два .cpp-файла, просто main.cpp, или есть какое-то другое правило, чтобы помочь мне отслеживать все это? – OrangeSherbet