当前位置:编程学习 > wap >>

还是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就停在本页。 --------------------编程问答--------------------
引用 2 楼  的回复:
LZ,可以重写 bool validatePage()函数,表示对用户点击下一步或完成进行一个判断。如果返回为true,就进入下一页,返回false就停在本页。


是可以的,但是这不是我想要的结果(用户体验不好),我想要的是没有输入时按钮是不可用的。
我后来看了下Qt本身的向导和其他IDE的向导,似乎都没有一开始就下一步按钮置灰的,都要填充上“untitled”之类的。我估计向导的设计本身就不允许这样的操作。 --------------------编程问答--------------------
引用 3 楼 gerryleeke 的回复:
引用 2 楼 的回复:

LZ,可以重写 bool validatePage()函数,表示对用户点击下一步或完成进行一个判断。如果返回为true,就进入下一页,返回false就停在本页。


是可以的,但是这不是我想要的结果(用户体验不好),我想要的是没有输入时按钮是不可用的。
我后来看了下Qt本身的向导和其他IDE的向导,似乎都没有一开始就下一步按钮置灰的,都要填充上“untitle……
你看QT自带的例子,Qialogs中License Wizard和Class Wizard,这里边就是未输入时将按钮置灰。具体实现我没看,我只知道它达到了这样的效果,你去看一下。 --------------------编程问答-------------------- 它那个是通过QWizardPage::registerField()注册带“*”的filed实现的,用户没填写时按钮时置灰的。

可是我在这基础上去判断用户输入是否合法再 NextButton->setEnalbe(bool)的话会有冲突,按钮没有按照我的规则去变灰。

下面我贴出我测试的主要代码,有兴趣的童鞋可以试一下。


//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)
void setVisible(bool visible){QWizardPage::setVisible(visible); if (visible){QPushButton *btn = wizard()->button(QWizard::NextButton);connect(btn, SIGNAL(clicked()), wizard(), SLOT(onClicked())}}
补充:移动开发 ,  Qt
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,