1

ボタンの作成時に、セルによって提供されるスペース全体を埋めるか、埋めないかのプッシュボタンが必要ですQGridLayout(配置値はファイルから読み込まれます)。次のコードで状況を単純化しました。実行時に、ユーザーはボタンの配置を設定できます。ボタンをレイアウト セル全体に配置するか、中央に配置するかのいずれかです。ボタンが指定された NULL 配置で開始されない限り、機能します。それでも、NULL アラインメントで開始する機能が必要です (つまり、ボタンがレイアウト セルのスペースを埋めます)。最初に NULL で位置合わせするとき、ボタンを AlignVCenter 設定にロックするために何が設定されていますか? また、ボタンを null 位置合わせ以外で初期化されたように動作させるにはどうすればよいですか?

Ubuntu 12.04 LTSでQt 4.8を使用しています

#include <QPushButton>
#include <QGridLayout>
#include <QMainWindow>
#include <QApplication>

class MyWidget : public QWidget {
    Q_OBJECT
    QPushButton* m_pb;
    QGridLayout* m_gl;
protected slots:
    void pbClicked();
public:
    MyWidget(QWidget* parent = 0);
};

MyWidget::MyWidget(QWidget* parent): QWidget(parent)
{
    m_pb = new QPushButton(tr("push me"));
    connect(m_pb, SIGNAL(clicked()), this, SLOT(pbClicked()));
    m_gl = new QGridLayout();
    //use (1) to see button expand when button is pressed
    //use (2) to show that I can't start off expanded
    /*1*/ //m_gl->addWidget(m_pb, 0, 0, Qt::AlignCenter); // creates desired effect
    /*2*/ //m_gl->addWidget(m_pb, 0, 0, 0); //does not create desired effect
    setLayout(m_gl);
}

void MyWidget::pbClicked(){
    //will expand button so long as initial alignment is not NULL
    m_gl->setAlignment(m_pb, 0);
}

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    MyWidget* widget = new MyWidget();
    QMainWindow window;
    window.setCentralWidget(widget);
    window.show();
    return app.exec();
}

#include "main.moc"
4

1 に答える 1