• 5596阅读
  • 3回复

菜问:QT4中如何显示第二个对话框?(解决了,但又有新疑问) [复制链接]

上一主题 下一主题
离线wugamp
 

只看楼主 倒序阅读 楼主  发表于: 2008-03-30
菜问:QT4中如何显示第二个对话框?(解决了,但又有新疑问)
— 本帖被 XChinux 执行加亮操作(2008-03-30) —
关键词: 双窗口
这个问题很菜,但我还是无法不问。
我们使用QT4。要求实现这样的功能:点按钮后,跳出一个小窗口,用户在小窗口里做某些操作,关闭小窗口后,才能回到原来的主窗口继续工作。

我创建了一个小窗口的类(基类QWidget)S,我这样写:
S qS;
qS.show();

结果是:小窗口闪了一下就消失了。
但是,以前在QT3里这样做是没问题的。怎么到了QT4就不行了呢?
请问这是什么原因呢?

多谢了!


[ 此贴被wugamp在2008-03-30 21:28重新编辑 ]
离线wugamp

只看该作者 1楼 发表于: 2008-03-30
刚才翻了一下前面的帖子,明白是怎么回事了。
我把S作为全局变量,在要显示的时候new一个指针出来,就成功了。
如下:
S *pS; //全局指针

要显示的时候:
pS =new S();
pS->show();

S::S():QWidget()
{
  setupUi(this);
  ....
  ....
}



不过我现在还是有3个疑问:
1。setupUi是做什么用的呢?我在qt帮助里没看到它的条目;
2。用这种方式生成的子窗口,在我关闭它之后,还要不要释放 pS 指针呢?
3。我的本意是希望等子窗口关闭后,再继续执行 pS->show()后面的代码。但事实上是直接执行 pS->show()后面的代码了,根本就没有等我关闭子窗口!我把子窗口的属性设置成 blockApplication也没有用。当然,我可以利用信号量实现同步,但这种做法也太笨拙了吧?有没有更简便的解决方法呢?
[ 此贴被wugamp在2008-03-30 21:46重新编辑 ]
离线XChinux

只看该作者 2楼 发表于: 2008-03-30
1、像你这样的情况应该使用从QDialog继承过来的类,而非QWidget;
2、从设计方面考虑,最好不要使用全局变量;

下面的方法仅供参考:
void YourWindow::on_pushButton_clicked()
{
      QDialog dlg(this);
      if (dlg.exec == QDialog::Accepted)
        {
                // do something
        }
}
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线wugamp

只看该作者 3楼 发表于: 2008-03-31
多谢楼上.用QDialog继承过来,已经取得了成功!
快速回复
限100 字节
 
上一个 下一个