错误停靠窗口小部件中的QPushButton无法访问

时间:2013-01-03 23:17:11

标签: qt

新手在这里,我在一个主窗口中放置了一个停靠小部件,这个停靠小部件面板中有一个按钮,现在我想连接,这个按钮带有在主窗口中定义的功能,它抛出了一个错误,我该怎么办?感谢

connect
(
    perfectPanel_->btn_AAA,
    SIGNAL(clicked()),
    this,
    SLOT(on_actionAAA_triggered()),
    Qt::UniqueConnection
);

错误讯息是

$PWD/ui_perfectPanel.h: In constructor ‘xixi::xixi()’:
$PWD/ui_perfectPanel.h:71:18: error: ‘QPushButton* Ui_perfectPanel::btn_AAA’ is inaccessible
$PWD/xixi/xixi.cpp:51:25: error: within this context

请注意,我已经设法将其与主窗口(xixi.cpp)中的工具栏按钮连接,效果很好。

1 个答案:

答案 0 :(得分:1)

这是因为您的dock类perfectPanel从生成的ui类Ui::perfectPanel中私下继承:

class perfectPanel : public QWidget, private Ui::perfectPanel

您可以将该继承公开,但不应该。相反,你应该将信号作为perfectPanel类的一部分,并将内部信号从按钮路由到外部信号:

class perfectPanel ... {
...
signals:
    void AAA_clicked();
};

perfectPanel::perfectPanel() {
     setupUi(this);
     connect(btn_AAA, SIGNAL(clicked()), this, SIGNAL(AAA_clicked()));
}

(如果您要问,是的,您可以将2个信号连接在一起)。

然后,您只需在主窗口类中连接新信号:

connect(perfectPanel_, 
    SIGNAL(AAA_clicked()), 
    this,
    SLOT(on_actionAAA_triggered()),
    Qt::UniqueConnection
);