1

前の質問で、動作する(thanks, @Kuba Ober)の実装を示すコードが与えられましたheightForWidth()が、それはトップレベルのQWidget. 用に再現しようとしましたQMainWindowが、うまくいきませんでした。

heightForWidth()これは、トップレベルで機能するコードですQWidget:

QWidget w;
QVBoxLayout * l = new QVBoxLayout(&w);
l->addWidget(new Widget);
w.show();

そして、これはQMainWindowに同じことを実装しようとする場所ですが、ここでheightForWidth()は効果がありません(呼び出されても):

QMainWindow mainWnd;
QWidget *w = new QWidget;
QVBoxLayout * l = new QVBoxLayout(w);
l->addWidget(new Widget);
mainWnd.setCentralWidget(w);
// Second widget to take unused space.
QFrame * btm = new QFrame;
btm->setFrameShape(QFrame::Panel);
btm->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
l->addWidget(btm);
mainWnd.show();

では、なぜQMainWindow実装が機能しないのでしょうか。

4

1 に答える 1

0

最初に、プレースホルダーであっても、中央のウィジェットとして何かQMainWindowを設定する必要があることに注意してください。

あとは、既に行っているように、レイアウトを含むプレースホルダー ウィジェットを用意し、内部に2 つのウィジェットを配置するだけです。

あるいは、なぜウィジェットが正方形であることを主張しているのですか? 内部の正方形のセクションをペイントし、残りをデフォルトの背景ロールでクリアします。

于 2013-09-29T13:02:49.450 に答える