Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt如何知道小部件,用户上次在其中设置焦点的元素_Qt_Qwidget_Qevent - Fatal编程技术网

Qt如何知道小部件,用户上次在其中设置焦点的元素

Qt如何知道小部件,用户上次在其中设置焦点的元素,qt,qwidget,qevent,Qt,Qwidget,Qevent,Qt。我有一张表格。它有两个小部件,包含其他小部件、按钮、行编辑等。 我需要:当用户设置焦点,鼠标点击,或者对它包含的第一个小部件或元素进行操作时,我需要将变量设置为0。如果他对第二个小部件执行相同的操作,则必须在1中设置变量。 如何做到这一点?您始终可以使用自己的插槽和信号重新定义/(通过继承创建子类)小部件 据我所知,你的要求是可以的 QObject::connect(wid1,SIGNAL(clicked()),yourvariableclass,SLOT(setMyVariable_wi

Qt。我有一张表格。它有两个小部件,包含其他小部件、按钮、行编辑等。 我需要:当用户设置焦点,鼠标点击,或者对它包含的第一个小部件或元素进行操作时,我需要将变量设置为0。如果他对第二个小部件执行相同的操作,则必须在1中设置变量。 如何做到这一点?

您始终可以使用自己的插槽和信号重新定义/(通过继承创建子类)小部件

据我所知,你的要求是可以的

QObject::connect(wid1,SIGNAL(clicked()),yourvariableclass,SLOT(setMyVariable_wid1()); QObject::connect(wid2,SIGNAL(clicked()),yourvariableclass,SLOT(setMyVariable_wid2())


如果我的回答不适合你的问题,请再解释一下这个问题。我可以帮你。:)

QApplication::focusWidget()
返回指向此时具有焦点的小部件的指针。还有
QApplication::focusChanged(QWidget*旧,QWidget*现在)
信号,您可以将其连接到插槽以更改变量。

我不想重新定义每个组件。必须有一种更人性化的方式。然后只需使用信号槽机制将每个小部件的焦点事件连接到一个槽,该槽负责在0和1之间翻转变量的值。语法与我前面提到的一样。而且,继承一个小部件类并没有你想象的那么困难。您只需继承一个小部件类,添加新的/自定义信号和插槽。为了在UI中使用它,您可以添加一个普通小部件,然后将其升级到您的自定义小部件类型中。但据我所知,从你的要求,你可以简单地使用信号槽机制。谢谢。我明天会试试。谢谢。它真的很简单,而且很有效。void FormBackupPower::application_focusChanged(QWidgetold,QWidgetnow){const QWidget*widget=now;const QWidget*step1=dynamic_cast(this->ui->groupBoxStep1);const QWidget*step2=dynamic_cast(this->->ui->groupBoxStep2->groupBoxStep2);(widget!=NULL){if(widget==step1){this->->setCurrentStep(FormBackupPower;break;}如果(widget==step2){this->setCurrentStep(FormBackupPower::currentStep_low+1);break;}widget=widget->parentWidget();}