使用QMessageBox从选项列表中进行选择

|| 我刚从Java迁移到Qt,我有一个问题。在JOptionPane中,您可以传递一个选项数组,JOptionPane会自动为用户提供一个组合框,以便从中选择一个选项。在Qt中使用QMessageBox或其他本机Qt元素可能与此类似吗?
已邀请:
您应该使用
QInputDialog::getItem()
。例如:
QStringList fruits;
fruits << \"Apple\" << \"Banana\" ... ;
QString fruit = QInputDialog::getItem(this, \"Select fruit\", \"Fruit:\", fruits);
您可以阅读QMessageBox参考。 我正在从中复制粘贴代码示例:
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();
 switch (ret) {
   case QMessageBox::Save:
       // Save was clicked
       break;
   case QMessageBox::Discard:
       // Don\'t Save was clicked
       break;
   case QMessageBox::Cancel:
       // Cancel was clicked
       break;
   default:
       // should never be reached
       break;
 }
此代码创建一个带有三个按钮(“保存”,“放弃”,“取消”)的消息框。 “保存”按钮被聚焦。 您可以在setStandardButtons函数中使用按位或运算符组合标准按钮中的值。 如果您需要一些仅在运行时知道的选项,我可以提出这种可能的解决方案。
QMessageBox msgBox;

//set common message box parameters. (informative text, etc)

//iterate through possible options. For each possible option:
{
  QPushButton *button = msgBox.addButton(myQStringOption, QMessageBox::AcceptRole);
  connect(button, SIGNAL(clicked()), /* response object */, SLOT(/*response slot*/));
}

msgBox.exec();
我不确定这是否是最优雅的解决方案,但它是否可以工作。 如果您不想使用信号和插槽,则可以使用clickedButton()方法来确定按下了哪个按钮。
msgBox.exec();

if ((msgBox.clickedButton())->text() == myQStringOption){
  //doStuff
}

要回复问题请先登录注册