QWizardPage:如何重新禁用 "Next" 按钮
QWizardPage: how to re-disable "Next" button
我有一个 QWizardPage
,用户应该在其中完成某些步骤,最后有一个按钮 "Test"。如果用户按下那个按钮,会发生两件事:
"Next" 按钮启用,以便转到 QWizard
的下一页。这是通过发出连接到 QWizardPage
的按钮的特殊信号来实现的:
this->registerField("test*", m_button, "text", SIGNAL(testDone()));
m_button
派生自 QPushButton
,带有自定义信号 testDone()
。
- 按钮名称更改为 "Try again" 以提供重新尝试一系列步骤的选项。如果用户按下按钮,GUI 元素 return 将变为初始状态( 除了在
QWizard
上禁用按钮 "Next" 外)。
问题是:对于第二种情况,如何确保 "Next" 按钮在被发射的 testDone()
信号启用后被禁用?
我想如果我断开特定信号 testDone()
与 QwizardPage
的连接(在它发出后),它会给出预期的结果,但是,它没有用。我试图断开 QWizardPage
上的所有连接(例如 this->disconnect
),但这也没有用。还有其他想法吗?
要控制页面 "readyness",您通常会覆盖 QWizardPage::isComplete
and signal changes via QWizardPage::completeChanged
。
所以对于你的例子,你可以给你的按钮一个 属性 并相应地连接它:
class MyButton : public QPushButton
{
Q_OBJECT
Q_PROPERTY(bool ready READ isReady NOTIFY readyChanged)
public:
MyButton(QWidget *parent);
bool isReady() const;
signals:
void readyChanged();
};
每当按下按钮或完成测试时,都会发出信号,并且 return 来自 isReady 函数的所需按钮状态。
在您的向导页面中,将 isComplete
替换为:
bool isComplete() const {
return QWizardPage::isComplete() && myButton->isReady();
}
并连接您页面中的信号:
connect(myButton, &MyButton::readyChanged, this, &MyPage::completeChanged);
我有一个 QWizardPage
,用户应该在其中完成某些步骤,最后有一个按钮 "Test"。如果用户按下那个按钮,会发生两件事:
"Next" 按钮启用,以便转到
QWizard
的下一页。这是通过发出连接到QWizardPage
的按钮的特殊信号来实现的:this->registerField("test*", m_button, "text", SIGNAL(testDone()));
m_button
派生自 QPushButton
,带有自定义信号 testDone()
。
- 按钮名称更改为 "Try again" 以提供重新尝试一系列步骤的选项。如果用户按下按钮,GUI 元素 return 将变为初始状态( 除了在
QWizard
上禁用按钮 "Next" 外)。
问题是:对于第二种情况,如何确保 "Next" 按钮在被发射的 testDone()
信号启用后被禁用?
我想如果我断开特定信号 testDone()
与 QwizardPage
的连接(在它发出后),它会给出预期的结果,但是,它没有用。我试图断开 QWizardPage
上的所有连接(例如 this->disconnect
),但这也没有用。还有其他想法吗?
要控制页面 "readyness",您通常会覆盖 QWizardPage::isComplete
and signal changes via QWizardPage::completeChanged
。
所以对于你的例子,你可以给你的按钮一个 属性 并相应地连接它:
class MyButton : public QPushButton
{
Q_OBJECT
Q_PROPERTY(bool ready READ isReady NOTIFY readyChanged)
public:
MyButton(QWidget *parent);
bool isReady() const;
signals:
void readyChanged();
};
每当按下按钮或完成测试时,都会发出信号,并且 return 来自 isReady 函数的所需按钮状态。
在您的向导页面中,将 isComplete
替换为:
bool isComplete() const {
return QWizardPage::isComplete() && myButton->isReady();
}
并连接您页面中的信号:
connect(myButton, &MyButton::readyChanged, this, &MyPage::completeChanged);