2011-06-17 9 views
1

うまくいけば、この質問は簡単です。私は実行時に私のGUIの特定の領域にいくつかのボタンを生成する必要があります。作成したいオブジェクトはチェックボックスです。ここではこれらのチェックボックスを作成するコードの一部です:Qt Creator MainWindowの特定のコンテナにオブジェクトを作成するにはどうすればよいですか?

void MainWindow::on_generateBoxes_clicked() 
{ 
    int x_dim = ui->xDim->value(); 
    int y_dim = ui->yDim->value(); 
    int z_dim = ui->zDim->value(); 
    QVector<QCheckBox*> checkBoxVector; 
    for(int i = 0; i < x_dim; ++i){ 
     for(int j = 0; j < y_dim; ++j){ 
      checkBoxVector.append(new QCheckBox(ui->dim1)); 
      checkBoxVector.last()->setGeometry(i * 20, j * 20, 20, 20); 
     } 
    } 
} 

私の質問は、私はこのアイデアを取るが、私はしたい特定の領域にこれらのチェックボックスを作成するにはどうすればよいのですか?エリアはdim1と呼ばれ、QTabWidgetのウィジェットです。

EDIT:その後、自分の位置がそのウィジェットからの相対であるようにあなたが親にMainWindowにあるチェックボックスをしたくないコード

+0

誰か他に提案がありますか? –

+0

少なくとも1つは明らかに間違っています.QVectorにon_generateBoxes_clicked() のローカルのチェックボックスを作成します。メソッドが返った後、ベクターは破棄されます。 (ベクターにはポインタしか保持していないので、CheckBoxが破棄されるかどうかはわかりません) –

+0

このdim1が表示されますか?たぶん、visible_とする必要がある色を試してみてください。そして、完全性のために、x_dimとy_dimの値がゼロでないことを確認します。それらをqDebugまたは何かに出力してください –

答えて

2

トルバドールを使用しない場合は、親として右のウィジェットを設定する必要があることを、基本的権利です。 QScrollAreaは、デフォルトでは何のウィジェットを持っていませんが、あなたはこのようにそれを作成する必要があります。

checkBoxArea = new QScrollArea(this); // this is the MainWindow or other parent 
background = new QWidget; 
checkBoxArea->setGeometry(0, 0, 200, 200); 
checkBoxArea->setWidgetResizable(true); 
checkBoxArea->setWidget(background); 
background->show(); 
for(int i = 0; i < 5; ++i){ 
    for(int j = 0; j < 5; ++j){ 
     checkBoxVector.append(new QCheckBox(background)); 
     checkBoxVector.last()->setGeometry(i * 20, j * 20, 20, 20); 
    } 
} 

重要なのは、あなたがそうでなければ、手動でサイズを変更するたびにサイズを設定する必要がありますcheckBoxArea->setWidgetResizable(true)を使用することです。

あなたはそれが期待するところウィジェットが表示されない場合は、この時間のほとんどは、これらの理由の一つを持っています

  • 間違った親
  • 目に見えない:使用のショー()
  • ゼロサイズ:使用setGeoemetry
+0

これはどちらもうまくいきませんでした。エラーを出さず、どこにでもチェックボックスを作成するだけです。 (遅れて申し訳ありません) –

+0

それは変です。私は空のプロジェクトにこのコードを入れ、ボックスは期待どおりに表示されます。私は 'background.show()'を 'background-> show()'に修正しましたが、それは問題ではなく、showコマンドは必要ありません。実際のコードを投稿することはできますか?それ以外の場合は: 'トリック'私は時々、どのウィジェットが表示され、どれが失敗したかを知るために背景カラーを赤のような明白なものに設定することがあります。 –

+0

質問を新しいコードで更新しました。ここでdim1はQWidgetです。 –

0

を更新しました。代わりに、私はあなたがQScrollArea上のウィジェットを設定していると仮定しQCsrollAreaすなわち

checkBoxVector.append(new QCheckBox(checkBoxArea->widget())); 

のウィジェットに親それらにしたいですか?その後、単なるQWidgetすなわち

checkBoxArea->setWidget(new QWidget()); 
+0

この解決策は機能していないようです。チェックボックスはどこにも生成されません。 –

関連する問題