1.QWizard 的使用
首先QWizard 是一个类似容器一样的东西,它需要一些小page作为它的item,想想list就会明白。这些小page就是QWizardPage ,你可以直接使用这个wizard容器和wizard page,只需使用QWizard的 addPage函数即可。你把这些page添加进去,它们就有了自己的id了,显示顺序也确定了。当然这些page也可以setTitle,setLayout因为他们继承于QWidget ,还可以setSubTitle等等。
如果你想要这些page按你安排的顺序显示,那么就可以使用如:setPage( Page_Intro, new IntroPage);前面个参数是id号,后面个则是page的指针。当然为了更加好的使用 QWizard ,你可以自定义类来继承于 QWizard 和 QWizardPage ,在你添加了page后,你可以使用 setStartId来设置起始page。
现在自定义你自己的QWizardPage 吧。比如:
EvaluatePage:: EvaluatePage( QWidget * parent)
: QWizardPage ( parent)
{
setTitle( tr( "Evaluate <i>Super Product One</i>™" ));
setSubTitle( tr( "Please fill both fields. Make sure to provide a valid "
"email address (e.g., [email protected])." ));
nameLabel = new QLabel ( tr( "N&ame:" ));
nameLineEdit = new QLineEdit ;
nameLabel-> setBuddy( nameLineEdit);
emailLabel = new QLabel ( tr( "&Email address:" ));
emailLineEdit = new QLineEdit ;
emailLineEdit-> setValidator( new QRegExpValidator ( QRegExp ( ".*@.*" ), this ));
emailLabel-> setBuddy( emailLineEdit);
registerField( "evaluate.name*" , nameLineEdit);
registerField( "evaluate.email*" , emailLineEdit);
QGridLayout * layout = new QGridLayout ;
layout-> addWidget( nameLabel, 0 , 0 );
layout-> addWidget( nameLineEdit, 0 , 1 );
layout-> addWidget( emailLabel, 1 , 0 );
layout-> addWidget( emailLineEdit, 1 , 1 );
setLayout( layout);
}
代码应该不需要再解释了吧。
这个时候重写一个虚函数
int EvaluatePage:: nextId() const
{
return LicenseWizard:: Page_Conclusion;
}
QWizard 也有,在它里面可以使用switch来判断 currentId,也可以直接在page里面定义nextId,如上代码中。
重写了这个函数后,它就能自动在你按下next按钮后跳转到指定页面。
重写page的函数void initializePage();可以在该page启动的时候进行自定义操作。
特别介绍一下registerField函数的使用。
registerField("register.name*", nameLineEdit);
注册了一块field来供wizard里面的所有page都可以访问,而如果在名字里面加了*号的话,则指定该区域是强制区域,也就是说在该page中
必须所有的强制区域都有了合适的数据,next按钮和finish按钮才能发挥功效。
在强制区域中可以使用setValidator来进行条件的设置,从代码
emailLineEdit-> setValidator( new QRegExpValidator ( QRegExp ( ".*@.*" ), this ));中可以看到。
2. QLabel
一些比较有意思的功能,比如setBuddy,官方说:
When the user presses the shortcut key indicated by this label, the keyboard focus is transferred to the label's buddy widget.
3. setWordWrap
自动换行操作。比如QLabel的文字,但是前提是要有空格之类才能换行。