C++ Qt中按钮关闭事件后的当前聚焦按钮

C++ Qt中按钮关闭事件后的当前聚焦按钮,c++,qt,C++,Qt,我尝试使用qApp->focusWidget。这将为我提供有关当前具有焦点的项目的信息 例如: ->QPushButton0xcdacc0,名称=按钮 有了这些信息,同一个符文的功能 我想使用地址0xcdacc0,正如Bowdzone已经提到的,如果您在问题中添加更多信息并解释您想要实现的目标,这将非常有帮助 我猜你想做的是,当一个信号被发送时,你想知道是哪个物体发送了信号,你想对这个物体做些什么。如果确实如此,那么您可以使用您提到的方法,或者使用sender方法 在下面的示例中,我有一个带有复

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

例如: ->QPushButton0xcdacc0,名称=按钮

有了这些信息,同一个符文的功能


我想使用地址0xcdacc0

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

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

在下面的示例中,我有一个带有复选框和按钮的简单对话框。它们都连接到同一插槽。当插槽被调用时,它确定调用它的对象的类型,然后将它们强制转换为相应的类型并使用它们执行操作。注意,我使用两种不同的方法来确定类型,一种使用qt QMetaObject,另一种使用动态_cast,另外两种不同的方法来确定谁发送了信号发送器和focusWidget,如上所述。这只是为了说明,即使这不是perl

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

对话.h

dialog.cc


如果有帮助,请告诉我。

我完全不知道你想问什么。请编辑您的问题,并对您正在尝试的内容和您试图实现的内容进行更多解释。@Bowdzone我想使用0xcdacc0地址指针为什么要使用绝对地址指针?你希望通过这件事达到什么目的!?
#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
#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();
  }

}