0

私の目的は、プッシュボタンをクリックすると動的にコマンドリンクボタンの配列を作成し、それらすべてをQscrollArea内の垂直レイアウト内に表示することです。ボタンのデータをデータベースから取得します。このために、ボタン用のスロットを作成し、slot関数内に次のコードを記述しました。

QCommandLinkButton *slotButtons[10];
for(int i=0; slotQuery.next(); i++)
{
    slotButtons[i] = new QCommandLinkButton;
    slotButtons[i]->setText(slotQuery.value(0).toString());
    slotButtons[i]->setDescription(slotQuery.value(1).toString());


    ui->scrollAreaSlots->layout()->addWidget(slotButtons[i]);
    ui->scrollAreaSlots->show();
    slotButtons[i]->show();


} 

これはエラーなしでコンパイルされますが、showを呼び出した後でもボタンは表示されません。誰かが私がどこで間違っているのか教えてもらえますか?

更新:すべての「[i]」を削除してループにコメントを付けた場合。基本的に1つのコマンドリンクボタンを作成するだけで、完全に機能します。ただし、ループでは機能しません。私のループはすべて正しいですか?

4

2 に答える 2

1

QScrollArea には、他のウィジェットを含めることができる 1 つの子ウィジェットがあります。

QScrollArea ウィジェットが Qt Creator の UI デザイナーで作成されると、Qt Creator は scrollAreaWidgetContents という名前のウィジェットを自動的に作成します。その後、自動的に作成されないウィジェットのレイアウトにボタンが追加されます。レイアウトは、ボタンも追加する次のコードで作成されます。

QCommandLinkButton *slotButtons[10];
QVBoxLayout* layout = new QVBoxLayout(ui->scrollAreaWidgetContents);
for(int i=0; slotQuery.next(); i++)
{
    slotButtons[i] = new QCommandLinkButton;
    slotButtons[i]->setText(slotQuery.value(0).toString());
    slotButtons[i]->setDescription(slotQuery.value(1).toString());
    ui->scrollAreaWidgetContents->layout()->addWidget(slotButtons[i]);
} 
于 2012-10-14T17:54:42.537 に答える
0

次の行を追加してみてください(ボタンをスクロール領域に追加する前に)

slotButtons[i]->setVisible(true);

これにより、ボタンをスクロール領域に追加したときに、ボタン自体が確実に表示されるようになります。

于 2012-10-14T16:47:41.733 に答える