【问题标题】:error QPushButton in a dock widget is inaccessible停靠小部件中的错误 QPushButton 无法访问
【发布时间】:2013-01-04 09:02:08
【问题描述】:

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

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) 中的工具栏按钮连接起来,效果很好。

【问题讨论】:

    标签: qt


    【解决方案1】:

    这是因为您的停靠类 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
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      相关资源
      最近更新 更多