我有QWizardPage
用户应该经过某些步骤,最后有一个按钮"测试"。如果用户按下该按钮,则会发生两件事:
"接着"按钮已启用,以转到QWizard
的下一页。这是通过发出按钮的特殊信号来实现的,该信号连接到QWizardPage
:
this->registerField("test*", m_button, "text", SIGNAL(testDone()));
m_button
源自QPushButton
,带有自定义信号testDone()
。
QWizard
上)。 问题是:对于第二种情况,我该如何确保"下一步"按钮被发出的testDone()
信号启用后被禁用?
我想如果我将testDone()
与QwizardPage
中的特定信号断开(在发出之后),它会产生预期的结果,但是,它不起作用。我试图断开QWizardPage
上的所有内容(例如this->disconnect
),但这也无效。还有其他想法吗?
答案 0 :(得分:1)
要控制页面“准备就绪”,您通常会覆盖QWizardPage::isComplete
并通过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();
};
每当按下按钮或测试完成时,发出信号,并从isReady功能返回所需的按钮状态。
在向导页面中,将isComplete
覆盖为:
bool isComplete() const {
return QWizardPage::isComplete() && myButton->isReady();
}
并连接页面中的信号:
connect(myButton, &MyButton::readyChanged, this, &MyPage::completeChanged);