次のコードを実行すると、minimumSizeは新しく追加されたラベルを考慮しません。ラベルは、ウィンドウ内にコードが表示された後に追加され、ウィジェットはそれに応じてサイズを変更する必要があります。私は、ミリ秒のカップルを待って(最初のペイントが発生し、おそらく後)、のminimumSizeが正しいですが、私は私が表示されたときに...新しいラベルを追加した後に右の「W」QVBoxLayout addWidgetの後にminimumSizeが正しくない
#include <QApplication>
#include <QtCore>
#include <QWidget>
#include <QVBoxLayout>
#include <QLabel>
#include <stdlib.h>
/* This application prints the following output:
label hint: 33x16
layout: 24x24
layout with label: 24x24
layout with label (activated): 24x24
And this comes out when the main_window->show() is executed last (this is correct):
label hint: 33x16
layout: 24x24
layout with label: 57x40
layout with label (activated): 57x40
*/
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget *main_window = new QWidget();
QWidget* w= new QWidget(main_window);
w->move(20,20);
QVBoxLayout *lay = new QVBoxLayout(w);
// When this happens *after* widgets are added, the sizes are OK.
// When we show the main window before, the sizes are wrong. Why ?
main_window->show();
QLabel *lbl = new QLabel("Hello");
QSize sz = lbl->sizeHint();
printf("label hint: %ix%i\n", sz.width(), sz.height());
sz = lay->minimumSize();
printf("layout: %ix%i\n", sz.width(), sz.height());
lay->addWidget(lbl);
// resizing 'w' here does not work because minimumSize is wrong...
// w->resize(lay->minimumSize());
sz = lay->minimumSize();
printf("layout with label: %ix%i\n", sz.width(), sz.height());
lay->activate();
sz = lay->minimumSize();
printf("layout with label (activated): %ix%i\n", sz.width(), sz.height());
// layout and label sizes are OK if this is executed here.
//main_window->show();
return app.exec();
}
メインウィンドウのサイズを変更したい場合()の追加ラベルの前に:
http://lubyk.org/en/image394_std.png?661680336517
とshow()が最後に表示され、同じこと:
http://lubyk.org/en/image395_std.png?661680336526
実際のユースケースは、Rubykのネットワーク上のリモートプロセスを表示する何らかの「ツール」ウィジェットです。これらのプロセスは行き来します。私がQHBoxLayoutを使用しているが、内部のマシンリストを使用すると、それは無駄な(そして醜い)すべての垂直スペースを使用します。フローティングウィジェットを使用することで、透明になり(見た目はきれい)、下のスペースを使用できます。
バグプロセスが表示されたら:
http://lubyk.org/en/image393_std.png?661680334439
PS: "ガスパール"
http://lubyk.org/en/image392_std.png?661680334428
正しい描画が(私はサイズ変更及びサイズの更新を強制的にメインウィンドウをサイズ変更しました)私のマシンのホスト名です。
'lbl-> show()'は私のコードで見逃したものです。助けてくれてありがとう。 – gaspard
lbl-> show();とても簡単!これを含む例はありません。明示的に必要とされるとは限りませんか? –