我有一个QWizardPage,用户应该通过某些步骤,在其中的末尾有一个按钮“测试”。如果用户按下该按钮,就会发生两件事:
QWizard的下一页。这是通过发出按钮的特殊信号来实现的,该信号连接到QWizardPage:
this->registerField("test*", m_button, "text", SIGNAL(testDone()));m_button是从带有自定义信号testDone()的QPushButton派生的。
QWizard上的"Next“按钮外)。问题是:对于第二个场景,如何确保在发出的testDone()信号启用后"Next“按钮被禁用?
我想,如果我将特定的信号testDone()与QwizardPage断开(在发出信号之后),它将提供所需的结果,但是,它没有工作。我试图断开QWizardPage上的所有连接(例如,this->disconnect),但这也不起作用。还有其他想法吗?
发布于 2017-10-18 09:10:30
要控制页面的“就绪性”,通常需要重写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);https://stackoverflow.com/questions/46799143
复制相似问题