还是QWizard的问题
我想在初始化向导的时候禁用Next按钮,为什么不起作用?
Wizard::Wizard(QWidget *parent) :
QWizard(parent),
ui(new Ui::Wizard)
{
ui->setupUi(this);
QAbstractButton *bt = this->button(QWizard::NextButton);
bt->setEnabled(false);//在这里不起作用,放在wizardPage的initialize里也不行
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(test()));//在槽函数里面就可以
}
我需要做一个类似 class wizard 的东东,要对用户的输入进行判断才能到下一页。一开始没有用户输入的时候我不希望他能够点下一步按钮。 --------------------编程问答-------------------- 是否是界面没有刷新的问题,强制刷新一下试试 --------------------编程问答-------------------- LZ,可以重写 bool validatePage()函数,表示对用户点击下一步或完成进行一个判断。如果返回为true,就进入下一页,返回false就停在本页。 --------------------编程问答--------------------
是可以的,但是这不是我想要的结果(用户体验不好),我想要的是没有输入时按钮是不可用的。
我后来看了下Qt本身的向导和其他IDE的向导,似乎都没有一开始就下一步按钮置灰的,都要填充上“untitled”之类的。我估计向导的设计本身就不允许这样的操作。 --------------------编程问答-------------------- 你看QT自带的例子,Qialogs中License Wizard和Class Wizard,这里边就是未输入时将按钮置灰。具体实现我没看,我只知道它达到了这样的效果,你去看一下。 --------------------编程问答-------------------- 它那个是通过QWizardPage::registerField()注册带“*”的filed实现的,用户没填写时按钮时置灰的。
可是我在这基础上去判断用户输入是否合法再 NextButton->setEnalbe(bool)的话会有冲突,按钮没有按照我的规则去变灰。
下面我贴出我测试的主要代码,有兴趣的童鞋可以试一下。
--------------------编程问答-------------------- 重写 void setVisible(bool visible)
//testwizardpage.cpp
TestWizardPage::TestWizardPage(QWidget *parent) :
QWizardPage(parent)
{
label = new QLabel("Name",this);
editor = new QLineEdit(this);
QGridLayout *layout = new QGridLayout;
layout->addWidget(label);
layout->addWidget(editor);
setLayout(layout);
registerField("name*",editor);//这里使editor为必填区域
connect(editor,SIGNAL(textChanged(QString)),this,SLOT(Test()));//这里对非法字符进行判断
//这样之后初始化时按钮是置灰的,可是当我输入第一个字符时按钮就可用了,无论是否非法
}
void TestWizardPage::Test()
{
QAbstractButton *nextBtn = this->wizard()->button(QWizard::NextButton);
QRegExp rxName(QLatin1String("^[A-Za-z_]+([A-Za-z_0-9]*)$"));
if(!editor->text().contains(rxName) )
{
nextBtn->setEnabled(false);
}
else
{
nextBtn->setEnabled(true);
}
}
void setVisible(bool visible){QWizardPage::setVisible(visible); if (visible){QPushButton *btn = wizard()->button(QWizard::NextButton);connect(btn, SIGNAL(clicked()), wizard(), SLOT(onClicked())}}
补充:移动开发 , Qt