4

Qt 4.8.4 でアプリケーションを開発しています。そこでは次のことを行います。

次のように QGridLayout をサブクラス化します。

class Viewer : public QGridLayout
{
    Q_OBJECT
    ...................
private:
    // Objects
    /// Maximize button object
    ViewerGeneric* viewerGeneric;

    /// Maximize button object
    QPushButton* btnMaximize;

    /// Close button object
    QPushButton* btnClose;

    /// Connect button object
    QPushButton* btnConnect;

    /// Central viewer layout object
    QGridLayout* viewer;

    /// Indicates the row position in the main grid
    unsigned int row;

    /// Indicates the column position in the main grid
    unsigned int col;
};

次に、コンストラクターで次のようなことを行います。

// Create the objects
btnMaximize = new QPushButton("max");
btnClose = new QPushButton("close");
btnConnect = new QPushButton("connect");

// Add the horizontal toolbar
QHBoxLayout* toolbar = new QHBoxLayout();
toolbar->setSizeConstraint(QLayout::SetMinimumSize);
toolbar->addItem(new QSpacerItem(0, 0, 
                     QSizePolicy::Expanding, QSizePolicy::Minimum));
toolbar->addWidget(btnMaximize);
toolbar->addWidget(btnClose);

// Add the 'Connect' button
viewer = new QGridLayout();
viewer->addWidget(btnConnect);

// Add the widgets
this->addItem(toolbar, 0, 0);
this->addItem(viewer, 0, 0, 2);

しかし、最終的に、Viewer クラスをメイン ウィンドウに表示すると、ウィンドウは完全に空白になります。誰かが私を助けてくれることを願っています。ありがとうございました。

乾杯、

4

4 に答える 4

4

親ウィジェットが既に表示show()されている場合は、後で追加されたウィジェットのメソッドを呼び出して、それらを表示する必要があります。

于 2012-12-20T10:02:50.123 に答える
4

最後に、解決策を見つけました:

レイアウトをレイアウトに追加するには、addItem() の代わりに addLayout() 関数を使用します。どれが違いなのかよくわかりませんが、うまくいきます。

コメントしてくれてありがとう!

于 2012-12-20T11:13:14.750 に答える
0

最初にレイアウトを親に設定してから、addWidget 関数を使用してウィジェットを親に追加します。

必要に応じて、show() および hide() 関数を使用してちらつきを回避し、レイアウト内のすべてを一度に表示できます。

ウィジェットを動的に追加する必要がない場合は、QT デザイナーを使用して .ui クラスを作成してみてください。

于 2012-12-20T10:56:56.823 に答える
0

addWidget関数を使用して追加できます...私はまだそれを使っていません...試してみることができます...

http://qt-project.org/doc/qt-4.8/qgridlayout.html

詳しくは上記ページをご覧ください。...

于 2012-12-20T10:00:08.257 に答える