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