У меня есть класс главного окна, который содержит виджет QSplitter (среди других виджетов). Содержимое этого сплиттера заполняется виджетами другого класса.
Внутри этого другого Widgwt у меня есть макет с добавленным QPushButton с именем test_btn. У меня также есть функция, определенная в файле заголовка под public slots:
, называемая test_function, которая имеет соответствующий код в файле cpp:
cout << "Test!" << endl;
Я пытаюсь вызвать эту функцию, используя следующий код:
connect(test_btn, SIGNAL(clicked()), SLOT(test_function()));
Виджеты и кнопки отображаются в приложении, как и ожидалось, но когда я нажимаю на них, ничего не происходит.
Если я добавлю тот же код connect
в главное окно, он будет работать (для вызова тестовой функции из главного окна), т.е.
connect(cc_point.test_btn, SIGNAL(clicked()), SLOT(main_win_test_function()));
Я не могу вызвать тестовую функцию из другого класса, если я не вызову ее из main_win_test_function()
Я знаю, что мне не хватает «виджета приемника» в операторе подключения, хотя он работает без него в классе главного окна, и при компиляции я не получаю никаких ошибок.
Нужно ли мне определять родителя или что-то в other_class
?
main_window.cpp:
main_window::main_window()
{
add_splitter();
QGridLayout *window_layout = new QGridLayout;
window_layout->setSpacing(0);
window_layout->setContentsMargins(0, 0, 0, 0);
window_layout->addWidget(splitter1, 0, 0);
set_layout(window_layout);
}
void main_window::add_splitter()
{
other_class oc_point;
splitter1 = new QSplitter(Qt::Horizontal);
splitter1->addWidget(oc_point.oc_widget);
}
другой_класс.cpp:
other_class:other_class()
{
oc_widget = new QWidget;
QGridLayout *other_layout = new QGridLayout(oc_widget);
test_btn = new QPushButton;
test_btn->setText("Test Button");
connect(test_btn, SIGNAL(clicked()), test_btn->parent(), SLOT(test_function());
other_layout->addWidget(test_btn);
}
void other_class::test_function()
{
cout << "Test output" << endl;
}
основной.cpp:
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
main_window window;
window.resize(1100, 700);
window.setWindowTitle("Qt Test");
window.setWindowIcon(QIcon (":/images/icon_1.png"));
window.setMinimumHeight(500);
window.show();
return app.exec();
}
Как я упоминал выше, все это прекрасно работает, поскольку создается окно и отображаются виджеты, но test_function не вызывается, когда я нажимаю кнопку. Дайте мне знать, если мне нужно также включить файлы заголовков.