在Qt中按下按钮事件后的当前聚焦按钮

时间:2015-09-03 04:17:30

标签: c++ qt

我尝试使用qApp->focusWidget()。这为我提供了有关焦点的当前项目的信息。

例如:
-->QPushButton(0xcdacc0, name = "pushButton")

有了这些信息,相同的符文函数?

我想使用地址0xcdacc0

1 个答案:

答案 0 :(得分:0)

正如Bowdzone已经提到过的,如果你在问题中添加更多信息并解释你想要实现的目标,那将会非常有帮助。

我想你想要做的是发送一个信号,你想知道哪个物体发送了信号,你想要对那个物体做些什么。如果确实如此,那么您可以使用您提到的方法,也可以使用sender方法。

在下面的示例中,我有一个带有复选框和按钮的简单对话框。它们都连接到同一个插槽。调用槽时,它会确定调用它的对象类型,然后将它们转换为相应的类型并对它们执行操作。请注意,我使用两种不同的方法来确定类型,一种使用qt QMetaObject,另一种使用dynamic_cast,还有两种不同的方法来确定谁发送信号(senderfocusWidget如上所述)。这只是为了显示TIMTOWTDI(即使这不是perl)。

这只是显示原理的虚拟代码,您的实现将取决于您想要做什么。

<强> dialog.h

#ifndef MYDIALOG_H
#define MYDIALOG_H

#include "ui_dialog.h"

class Dialog: public QDialog, public Ui::Dialog
{
  Q_OBJECT
public:
  Dialog(QWidget *parent = 0);


public slots:

  void handleAction();

};


#endif

<强> dialog.cc

#include "dialog.h"

#include <QtCore>

Dialog::Dialog(QWidget *parent) : QDialog(parent)
{
  setupUi(this);
  connect(pushButton,SIGNAL(clicked()),this,SLOT(handleAction()) );
  connect(checkBox,SIGNAL(clicked()),this,SLOT(handleAction()) );
}

void Dialog::handleAction()
{
  QWidget *widget = QApplication::focusWidget();

  if( strcmp( widget->metaObject()->className(), "QPushButton") == 0 ) {
    qDebug() << "this comes from a QPushButton, let me print the text on the button";
    QPushButton *button = static_cast<QPushButton*>(widget);
    qDebug() << button->text();

  } else if ( dynamic_cast<QCheckBox*>(widget) ) {
    qDebug() << "this comes from a QCheckBox, let me print its check status";
    QCheckBox *check = static_cast<QCheckBox*>(widget);
    qDebug() << check->isChecked();
  }

  QObject *object = sender();

  if( strcmp( object->metaObject()->className(), "QPushButton") == 0 ) {
    qDebug() << "this comes from a QPushButton, let me print the text on the button";
    QPushButton *button = static_cast<QPushButton*>(object);
    qDebug() << button->text();

  } else if ( dynamic_cast<QCheckBox*>(object) ) {
    qDebug() << "this comes from a QCheckBox, let me print its check status";
    QCheckBox *check = static_cast<QCheckBox*>(object);
    qDebug() << check->isChecked();
  }

}

如果有帮助,请告诉我。