【发布时间】:2011-04-19 01:04:51
【问题描述】:
我刚从 Java 迁移到 Qt,我有一个问题。在 JOptionPane 中,您可以传递一个选项数组,JOptionPane 将自动创建一个组合框供用户选择。在带有 QMessageBox 或其他原生 Qt 元素的 Qt 中是否可能出现类似的情况?
【问题讨论】:
标签: java qt joptionpane qmessagebox
我刚从 Java 迁移到 Qt,我有一个问题。在 JOptionPane 中,您可以传递一个选项数组,JOptionPane 将自动创建一个组合框供用户选择。在带有 QMessageBox 或其他原生 Qt 元素的 Qt 中是否可能出现类似的情况?
【问题讨论】:
标签: java qt joptionpane qmessagebox
您应该使用QInputDialog::getItem()。例如:
QStringList fruits;
fruits << "Apple" << "Banana" ... ;
QString fruit = QInputDialog::getItem(this, "Select fruit", "Fruit:", fruits);
【讨论】:
您可以阅读 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
}
【讨论】:
if( msgbox.clickedButton() == button )