0

を追加した testFrame を使用QDialogしてデザイナーで作成しました。すべてが作成されて表示された後のある時点で、 を親としてプログラムで新しいウィジェットを作成しようとしています。何を試しても、新しいウィジェットは表示されません:QFrameQHBoxLayoutQFrame

init() メソッドの終わり:

QBoxLayout *testFrameLayout = new QHBoxLayout(this->testFrame); //QT3 docs use QBoxLayout pointer when creating QHBoxLayout

イベント中 (別のボタンが押されたなど)

testButton = new QPushButton(this->testFrame);
testButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed, false);
testButton->setMaximumWidth(50);
testButton->setMaximumHeight(50);
testButton->setMinimumWidth(50);
testButton->setMinimumHeight(50);

testFrameLayout->addWidget(testButton);

さまざまなウィジェット、コンテナー クラス (たとえばQGrid、レイアウトを管理する必要がない場合)、update()/repaint() の呼び出し (testFrame、testButton、ダイアログ自体) などでこの動作が得られます。 init() で行われた場合、ダイアログが表示された後に行われた場合はそうではありません。私は何かが欠けているに違いないので、助けていただければ幸いです!

注: Qt 3 を使用する非常に大規模なプロジェクトに取り組んでいるため、ソリューションはこのバージョンと互換性がある必要があります。

4

2 に答える 2

0

通話中

testButton->show();

最後にこの問題を解決しました。実際のボタンに show() を使用せずにフレームにadjustSize()を使用するとフレームが消えるため、このように追加すると明示的に表示されるまでウィジェットが非表示になる可能性があると思います。

于 2013-12-17T16:24:58.850 に答える
0

私のQt3アプリケーションのダイアログからのいくつかの作業コードは次のとおりです。

QVBoxLayout *vb = new QVBoxLayout(this, 5, 5);
// ...
QHBoxLayout *askline = new QHBoxLayout(vb, 10);
QPushButton *ok      = new QPushButton(tr("OK"), this);
QPushButton *cancel  = new QPushButton(tr("Cancel"), this);
askline->addWidget(ok);
askline->addWidget(cancel);
adjustSize();
// ...

あなたの問題は、レイアウトがあなたQPushButtonにスペースを割り当てておらず、adjustSize()必要であるということだと思います。

于 2013-12-17T13:46:57.063 に答える