0

新たにJavaからQtに移行していますが、質問があります。JOptionPaneでは、選択肢の配列を渡すことができ、JOptionPaneは、ユーザーが選択肢を選択するためのコンボボックスを自動的に作成します。QMessageBoxまたは別のネイティブQt要素を使用したQtで、これに類似したものが可能ですか?

4

2 に答える 2

3

を使用する必要がありますQInputDialog::getItem()。例えば:

QStringList fruits;
fruits << "Apple" << "Banana" ... ;
QString fruit = QInputDialog::getItem(this, "Select fruit", "Fruit:", fruits);
于 2011-04-19T07:33:23.667 に答える
-2

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;
 }

このコードは、3つのボタン([保存]、[破棄]、[キャンセル])を備えたメッセージボックスを作成します。保存ボタンにフォーカスがあります。

setStandardButtons関数でビットごとのOR演算子を使用して、標準ボタンの値を組み合わせることができます。

実行時にのみ既知のオプションが必要な場合は、この可能な解決策を提案できます。

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
}
于 2011-04-19T05:04:27.260 に答える