• 5554阅读
  • 5回复

关于子窗体调用show()无法显示窗体问题。 [复制链接]

上一主题 下一主题
离线wang2222ning
 

只看楼主 倒序阅读 楼主  发表于: 2014-06-21
    在尝试点击按钮时弹出窗体,测试了,能触发调用槽函数。以下是我的槽函数:
void MyCloudNote::showTextFont()
{
    qDebug()<<"showTextFont:";
    TextFontWidget textfontwidget(this);

    connect(&textfontwidget,SIGNAL(accepted()),
            this,SLOT(setTextfont()) );
    textfontwidget.setWindowFlags(Qt::Dialog);
    //textfontwidget.setVisible(true);
     textfontwidget.show();

            //当用户点击确定时可以生效
}

其中TextFontWidget类是继承QWidget调试显示出现了:   “showTextFont"   。我想请问下这是什么问题
离线dbzhang800

只看该作者 1楼 发表于: 2014-06-21
你这是个局部变量,刚刚调用完 show() 你就把它干掉了。那么短的显示时间,人眼反应不过来是正常的。
离线彩阳

只看该作者 2楼 发表于: 2014-06-21
将TextFontWidget改由QDialog继承,然后show()方法调用改为exec()方法调用。
上海Qt开发联盟,热忱地欢迎你的加入!
离线dbzhang800

只看该作者 3楼 发表于: 2014-06-21
回 彩阳 的帖子
彩阳:将TextFontWidget改由QDialog继承,然后show()方法调用改为exec()方法调用。 (2014-06-21 15:29) 

恩,另外,同样的效果,不使用QDialog,在他这个槽函数内加3行代码也能实现。

再者,如果他不期望模态对话框的的话,在槽函数内,将TextFontWidget直接分配在heap中,而不是stack中,其他地方不改,也大致解决问题了。
离线wang2222ning

只看该作者 4楼 发表于: 2014-06-21
哦,原来如此。犯了一个重大错误。谢谢指出
离线彩阳

只看该作者 5楼 发表于: 2014-06-21
回 dbzhang800 的帖子
dbzhang800:恩,另外,同样的效果,不使用QDialog,在他这个槽函数内加3行代码也能实现。
再者,如果他不期望模态对话框的的话,在槽函数内,将TextFontWidget直接分配在heap中,而不是stack中,其他地方不改,也大致解决问题了。 (2014-06-21 15:50) 

也就是说,使用new运算符创建一个堆上的对象,然后设置
Qt::WA_DeleteOnClose
这个属性,就可以不管这个窗体啦。
上海Qt开发联盟,热忱地欢迎你的加入!
快速回复
限100 字节
 
上一个 下一个