下面的例子程序是经过修改前面而得到的,有时,让你的程序从对话框返回值可能更加方便,而不必将它们与slot和信号捆绑在一起.这种技巧只可以应用在一定的情况下,即直到关闭对话框时才需要返回对话框的数据.
在前面的例子中,Apply按钮将数据提供给应用程序而不必关闭窗口.这个例子中去除了Apply按钮,删除了程序中所有的slot和信号(主程序中弹出对话框的除外).
因为不能使用Apply按钮,所以必须把它删除掉.为此, 将modify.cpp程序中的第6行和第7行改变如下:
Modify::Modify(QWidget *parent, const char*name)
: KDialogBase(parent, name, TRUE, "Modify", Ok | Cancel)
下一步是删除掉manwidget.cpp中的第23行到第37行,使用下面的方法替换原来的内容:
void MainWidget::popupKdb()
{
Modify *modify = new Modify(this, "modify");
modify->exec();
if (modify->result() == TRUE)
{
QString text = modify->getText();
int height = modify->getHeight();
int width = modify->getWidth();
resize(width, height);
label->setText(text);
}
delete modify;
}
当对话框被关闭的时候,exec()方法将返回.如果使用OK按钮来关闭对话框,那么由result()返回的值是TRUE;否则,为FALSE.如果结果为TRUE,那么用户输入的数据就将从widget返回,并且在resize()和setText()调用中被用来修改窗口显示.因为exec()方法直到对话框关闭时才返回,所以,如果决定不关闭窗口进行按钮选择,那么除了slot,没有其它办法,--这就是为什么不能使用Apply按钮的原因.
QString Modify::getText()
{
return(lineedit->text());
}
int Modify::getWidgth()
{
return((width0>text()).toInt();
}
int Modify:;getHeight()
{
return(height->text(), toInt());
}