我正在编写一个烤面包风格的消息框,但是我无法直接传递标准图标。下面的开关有效,但是太笨拙了。什么是这样做的正确方法,这样我就可以摆脱开关的选择了?

void MainWindow::mtoast(int msgtime,int level, QString msg)
{
    QMessageBox *mbox = new QMessageBox;
    mbox->setStandardButtons(0);
    mbox->setText(msg);

    switch(level){
        case 0:
            mbox->setIcon(QMessageBox::NoIcon);
            break;
        case 1:
            mbox->setIcon(QMessageBox::Question);
            break;
        case 2:
            mbox->setIcon(QMessageBox::Information);
            break;
        case 3:
            mbox->setIcon(QMessageBox::Warning);
            break;
        case 4:
            mbox->setIcon(QMessageBox::Critical);
            break;
    }


    mbox->setWindowFlags ( Qt::CustomizeWindowHint | Qt::WindowTitleHint);
    mbox->show();
    QTimer::singleShot(msgtime, mbox, SLOT(hide()));

}

最佳答案

更改函数签名,使其接受对 enum QMessageBox::Icon 的引用作为第二个参数,而不是int level。像这样:

void MainWindow::mtoast(int msgtime, const enum QMessageBox::Icon& icon, QString msg)
{
    QMessageBox *mbox = new QMessageBox;
    mbox->setStandardButtons(0);
    mbox->setText(msg);
    mbox->setIcon(icon); //this statement replaces the entire switch
    mbox->setWindowFlags ( Qt::CustomizeWindowHint | Qt::WindowTitleHint);
    mbox->show();
    QTimer::singleShot(msgtime, mbox, SLOT(hide()));

}

07-28 08:39