4

ダウンロード リストにウィンドウ dimanica を作成しています。しかし、スクロールバーが機能せず、「ウィジェットの子」が「カット」されます。

どこが間違っているのでしょうか? ありがとう。

ソース:

    QWidget *central = new QWidget;
    QScrollArea *scroll = new QScrollArea;
    QVBoxLayout *layout = new QVBoxLayout(scroll);
    scroll->setWidget(central);
    scroll->setWidgetResizable(true);

    int i=0;
    while(i<10){
        QWidget *p1 = new QWidget;
        QHBoxLayout *hl = new QHBoxLayout(p1);
        QLabel *label1 = new QLabel("test");
        QLabel *label2 = new QLabel("0%");
        hl->addWidget(label1);
        hl->addWidget(label2);
        layout->addWidget(p1);
        i++;
    }

    QMainWindow *w = new QMainWindow;
    w->setGeometry(50,50,480,320);
    w->setCentralWidget(scroll);
    w->show();
4

1 に答える 1

7

間違いを見つけました。layoutウィジェットに設定しcentralないでscrollください:

QWidget *central = new QWidget;
QScrollArea *scroll = new QScrollArea;
QVBoxLayout *layout = new QVBoxLayout(central);
scroll->setWidget(central);
scroll->setWidgetResizable(true);

編集:

お気づきのように、ラベルはすでに利用可能なすべてのスペースを占めています。label1左の境界線で始まり、中央でlabel2終わり、右の境界線で始まり、終わります。私の理解が正しければlabel1、使用可能なすべてのスペースを使用したいのですがlabel2、パーセントを使用して必要なスペースだけを使用する必要はありませんか?

QSizePolicyクラスについて読みsetSizePolicy()、ラベルで使用します。label2 宣言の直後に次の行を挿入してみてください。

QLabel *label2 = new QLabel("0%");
label2->setSizePolicy(QSizePolicy::QSizePolicy::Maximum,QSizePolicy::Maximum);

layout->addStretch();そして直前に一行追加QMainWindow *w = new QMainWindow;

于 2013-05-28T19:10:40.370 に答える