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

时间:2011-04-19 01:04:51

标签: java qt joptionpane qmessagebox

我刚从Java转到Qt,我有一个问题。在JOptionPane中,您可以传递一系列选项,JOptionPane将自动为用户创建一个组合框以从中选择。在使用QMessageBox或其他原生Qt元素的Qt中是否可能类似于此?

2 个答案:

答案 0 :(得分:3)

您应该使用QInputDialog::getItem()。例如:

QStringList fruits;
fruits << "Apple" << "Banana" ... ;
QString fruit = QInputDialog::getItem(this, "Select fruit", "Fruit:", fruits);

答案 1 :(得分:-2)

你可以阅读QMessageBox reference

我从中复制粘贴代码示例:

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函数中使用按位OR运算符组合Standard buttons中的值。

如果你需要一些只在运行时知道的选项,我可以提出这个可能的解决方案。

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
}