我有一个包含 QSplitter 小部件(以及其他小部件)的主窗口类。此拆分器的内容由另一个类中的小部件填充。
在这个其他 Widgwt 中,我有一个布局,其中添加了一个名为 test_btn 的 QPushButton 我还在名为 test_function 的头文件中定义了一个函数,该函数在public slots:
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
?
主窗口.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。让我知道是否还需要包含我的头文件。