• 7500阅读
  • 8回复

请教 QMessageBox问题 [复制链接]

上一主题 下一主题
离线kerry_wei
 
只看楼主 倒序阅读 楼主  发表于: 2010-11-02
— 本帖被 XChinux 执行加亮操作(2010-11-02) —
void SystemUpdate::on_okButton_clicked()
{
    QMessageBox msgbox;
    msgbox.warning (this,tr("Warning"),tr("the upgrade head version old!"),QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);
    msgbox.setStyleSheet("background-color:black;color:white");
    if(msgbox.exec() == QDialog::Accepted)
    {
        qDebug("-------------------ok--------------------\n");

    }
    else
    {
        qDebug("-------------------error--------------------\n");
        return;
    }
    this->close();
}
代码如上,我的原意是当messagebox弹出后,根据用户选择yes还是no按钮分别执行不同的操作;如图aa 

现在的问题是无论我点击yes还是no,都会弹出同样一个小窗口,如图bb, 

且点击该ok按钮后执行qDebug("-------------------error--------------------\n");        return;
请告知下如何解决?
[ 此帖被kerry_wei在2010-11-02 10:03重新编辑 ]
离线kerry_wei
只看该作者 1楼 发表于: 2010-11-02
晕 图片怎么看不见 。再试下
离线dbzhang800

只看该作者 2楼 发表于: 2010-11-02
不妨认真看看Manual:

返回值是 QMessageBox::Ok 之类的
离线kerry_wei
只看该作者 3楼 发表于: 2010-11-02
非常感谢楼上,正如你所言,我也试过这样的判断(如下代码),但结果还是 一样,会弹出
,然后当我点击该ok按钮时,会执行else里面的语句
    QMessageBox msgbox;
    msgbox.warning (this,tr("Warning"),tr("the upgrade head version old!"),QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);
    msgbox.setStyleSheet("background-color:black;color:white");
    if(msgbox.exec() == QMessageBox::Yes)
    {
        qDebug("-------------------ok--------------------\n");
    }
    else
    {
        qDebug("-------------------error--------------------\n");
        return;
    }

    this->close();
离线kerry_wei
只看该作者 4楼 发表于: 2010-11-02
现在关键不明白的是,为什么会弹出这个只有yes按钮的窗口?请高人指点下
离线kerry_wei
只看该作者 5楼 发表于: 2010-11-02
改了一下代码,如下
    QMessageBox msgbox;
    msgbox.warning (this,tr("Warning"),tr("the upgrade head version old!"),QMessageBox::Ok|QMessageBox::Cancel,QMessageBox::Ok);
    msgbox.setStyleSheet("background-color:black;color:white");
    int ret = msgbox.exec();
    qDebug("-------------------ret=%d-------yes=%d,no=%d-------------\n",ret,QMessageBox::Ok,QMessageBox::Cancel);
    if(ret == QMessageBox::Ok)
    {
        qDebug("-------------------ok--------------------\n");
    }
    else
    {
        qDebug("-------------------error--------------------\n");
        return;
    }

    this->close();
问题又出现了,当我点了 中的ok或cancel按钮后,还是会弹出 ,且ret的值总是QMessageBox::Ok
离线kerry_wei
只看该作者 6楼 发表于: 2010-11-02
再次看了一下QT手册,用示例试了一下,不会出现楼上第二个窗口,代码如下
    QMessageBox msgBox;
     msgBox.setText("The document has been modified.");
     msgBox.setInformativeText("Do you want to save your changes?");
     msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
     msgBox.setDefaultButton(QMessageBox::Save);
     int ret = msgBox.exec();
请教下高人,这两段代码执行结果为何会有如此大的差别; 是否楼上使用了msgbox.warning 函数导致不同?
离线XChinux

只看该作者 7楼 发表于: 2010-11-02
你直接

if (QMessageBox::question(this, "xxx", "fff", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes)
{
   //---------
}
else
{
  //---------
}
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线sbtree
只看该作者 8楼 发表于: 2010-11-02
这个问题就不用纠缠了,很明显,楼主没有正确运用warning函数的返回值,并且没理解QMessageBox类的真正用途,盲目的调用了exec函数
windows 7 + VC++2008 + Qt4.5.2
快速回复
限100 字节
 
上一个 下一个