4

私はここでビデオチュートリアルからqtを学んでいます。35本の動画を完成させました。そこで、qtを理解するためだけにサンプルアプリケーションを作成したいと思いました。最新バージョンのqtクリエーターを使用しています。

メインウィンドウのプッシュボタンをいくつか追加し、メニューバーとツールバーを削除しました。

ここに画像の説明を入力してください

実行した後、ウィンドウのサイズを変更してもスクロールバーが表示されないことがわかりました。

ここに画像の説明を入力してください

プッシュボタンのサイズを変更したり移動したりしたくありません。私はそれらが見えなくなっても大丈夫ですが、ユーザーが見えない部分にスクロールできるようにスクロールバーが欲しいです。スクロールエリアウィジェットを追加しましたが、機能しません。インターネットで検索してコーディングをしましたが、それもうまくいきませんでした。スクロール領域のサイズをウィンドウサイズまで大きくすると、実行後、ウィンドウは空白で表示されます。おそらく、プッシュボタンはスクロール領域の下にあります。どのオブジェクトを「上」に配置するかを変更するにはどうすればよいですか?

また、私は初心者なので、qtを使用して設計する際の最善のアプローチがわかりません。Designerを使用して必要なウィジェットを配置し、コーディングしてそれらの特性を与える必要がありますか?または、デザイナーを使用して完全な設計を行う必要がありますか?または、デザイナーを放棄して完全なコーディングを行う必要がありますか?ありがとう!

@Synxisを編集してください、それはあまり役に立ちませんでした。secentralwidget(ui-> scrollareacontentswidget);も使用しました。中央ウィジェットQWidgetを削除しようとしましたが、できません。解決策はありますか?

ここに画像の説明を入力してください

4

2 に答える 2

4

QWidgetにはスクロールバーがありません。スクロールバーがあるゾーンを追加する必要があります。

QScrollAreaをウィンドウに追加し、すべてのウィジェット(ボタンなど)をウィンドウに配置するだけです。スクロール領域をメインウィンドウ全体にレイアウトすることを忘れないでください。

より正確には、階層は次のようなものです。

main window central widget (with a layout)
    scroll area
        scroll area widget (with a layout, layout scroll area if you're in the designer)
            your container widget (should be layouted also)
                your buttons, layouts, etc...

(with a layout)=レイアウトを使用してウィジェットをレイアウトしますが、レイアウトする必要があるウィジェットは1つだけなので、レイアウトのタイプは重要ではありません)。

コンテナウィジェットは必要に応じてレイアウトする必要があります。スペーサーが便利な場合があります。

于 2012-10-21T07:54:46.130 に答える
0

QHBoxLayoutをプレーンなQWidget()オブジェクトとし、そのウィジェットオブジェクトをsetWidget()を呼び出すスクロール領域のウィジェットに設定します。それはすべて実際に必要です。または、余分なスペースを利用できる場合は、少なくとも時々setWidgetResizable(bool)を呼び出す必要があります。コード例を次に示します。

#include <QtGui>

class YourWidget : public QWidget
{
public:
    YourWidget(QWidget* parent=0)
        : QWidget(parent)
    {
        QHBoxLayout* buttonLay = new QHBoxLayout;
        for (int i=0; i<10; ++i) {
            QPushButton* button = new QPushButton(tr("Button%1").arg(i));
            buttonLay->addWidget(button);
        }

        QLabel* dummyBigLabel = new QLabel(tr("DummyBigLabel"));
        dummyBigLabel->setAlignment(Qt::AlignCenter);
        dummyBigLabel->setMinimumSize(400,300);
        dummyBigLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);

        QVBoxLayout* mainLay = new QVBoxLayout(this);
        mainLay->addLayout(buttonLay);
        mainLay->addWidget(dummyBigLabel);
    }
};

int main(int argc, char** argv)
{
    QApplication app(argc, argv);

QWidget* topLevelWidget = 0;
    YourWidget* editor = new YourWidget;
#ifdef USE_NO_SCROLL_AREA
    topLevelWidget = editor;
#else
    QScrollArea* scroller = new QScrollArea;
    scroller->setWidget(editor);
    topLevelWidget = scroller;
#endif
    topLevelWidget->show();
    topLevelWidget->raise();
    return app.exec();
}
于 2012-10-21T08:09:01.053 に答える