我尝试使用qApp->focusWidget()
。这为我提供了有关焦点的当前项目的信息。
例如:
-->QPushButton(0xcdacc0, name = "pushButton")
有了这些信息,相同的符文函数?
我想使用地址0xcdacc0
答案 0 :(得分:0)
正如Bowdzone已经提到过的,如果你在问题中添加更多信息并解释你想要实现的目标,那将会非常有帮助。
我想你想要做的是发送一个信号,你想知道哪个物体发送了信号,你想要对那个物体做些什么。如果确实如此,那么您可以使用您提到的方法,也可以使用sender
方法。
在下面的示例中,我有一个带有复选框和按钮的简单对话框。它们都连接到同一个插槽。调用槽时,它会确定调用它的对象类型,然后将它们转换为相应的类型并对它们执行操作。请注意,我使用两种不同的方法来确定类型,一种使用qt QMetaObject
,另一种使用dynamic_cast
,还有两种不同的方法来确定谁发送信号(sender
和focusWidget
如上所述)。这只是为了显示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();
}
}
如果有帮助,请告诉我。