使用 QT 编程时,主窗口创建了其他窗口类对象,用户点击其他窗口中的按钮时,操作由主窗口完成,那么我绑定的时候怎么绑定呢?
- 其他窗口类自己 connect 按钮和槽,然后在槽处理函数中 emit 一个信号,主窗口类绑定该信号与对应的槽函数进行处理。
class B
: public QWidget
{
Q_OBJECT
// 函数
public slots:
void onBtnOpenClicked();
void connectSignalsSlots();
signals:
void onOpen();
private:
QPushButton *pBtnOpen
};
void B::connectSignalsSlots()
{
connect(pBtnOpen, SIGNAL(clicked()), this, SLOT(onBtnOpenClicked()));
}
void B::onBtnOpenClicked()
{
emit onOpen();
}
class A
: QMainWindow
{
Q_OBJECT
public:
void connectSignalsSlots();
void onOpen();
public:
B * b;
}
void A::connectSignalsSlots()
{
connect(b, &B::onOpen, this, &A::onOpen);
}
void A::onOpen()
{
//...
}
- 其他窗口类的按钮 public 化,然后直接在主窗口类中绑定该窗口类的按钮与自己的处理函数
class B
: public QWidget
{
Q_OBJECT
// 函数
public:
QPushButton *pBtnOpen
};
class A
: QMainWindow
{
Q_OBJECT
public slots:
void connectSignalsSlots();
void onBtnOpenClicked();
public:
B * b;
}
void A::connectSignalsSlots()
{
connect(b->pBtnOpen, SIGNAL(clicked()), this, SLOT(onBtnOpenClicked()));
}
void A::onBtnOpenClicked()
{
//...
}
第一个方法比第二个方法多一步信号与槽的处理操作,但是第一个方法更能直观的表现控件与类的关系。
上面两个方法用哪种比较好?