Qt5のレイアウト設定について


Qt5について、下のようにすると、ボタンなどが全く表示されず、空のボックスが表示されます。コンパイルが通っているのでエラー？なのかどうかよくわかりませんが、コンソールに

QWidget::setLayout: Attempting to set QLayout "" on MainWindow "", which
already has a layout

と表示されます。setLayoutの使い方が間違っている気がするのですが、わかる方助けてください。

[code]

    //Header
    #include <QMainWindow>
    #include<QVBoxLayout>
    #include<QLabel>
    #include<QPushButton>
    #include<QHBoxLayout>
    
    class MainWindow : public QMainWindow
    {
    Q_OBJECT
    
    public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    private:
    };
    //mainファイル
    #include "mainwindow.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;
        w.show();
    
    return a.exec();
    }
    
    
     //cpp_file
    #include "mainwindow.h"
    
    
    MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    {
        QVBoxLayout *vLayout = new QVBoxLayout();
        vLayout->addWidget(new QLabel("hello"));
        vLayout->addWidget(new QPushButton("hello2"));
        QHBoxLayout *hLayout = new QHBoxLayout();
        hLayout->addLayout(vLayout);
        hLayout->addWidget(new QPushButton("hello3"));
    
        setLayout(hLayout);
    }
    
    MainWindow::~MainWindow()
    {
    
    }
    
[/code]




まず、全体を格納するためのウィジェット（CentralWidget）を作成してください。

ラベルやボタン等を作成する際は、親ウィジェットとして、自分自身のMainWindow（`this`）を指定してください。

すべてのパーツを作成し終わったら、`setCentralWidget`を行ってください。

[code]

    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
    {
        QWidget *central = new QWidget(this);
    
        QVBoxLayout *vLayout = new QVBoxLayout();
        vLayout->addWidget(new QLabel("hello", this));
        vLayout->addWidget(new QPushButton("hello2", this));
        QHBoxLayout *hLayout = new QHBoxLayout(central);
        hLayout->addLayout(vLayout);
        hLayout->addWidget(new QPushButton("hello3", this));
    
        setCentralWidget(central);
    }
    
[/code]




まず、全体を格納するためのウィジェット（CentralWidget）を作成してください。

ラベルやボタン等を作成する際は、親ウィジェットとして、自分自身のMainWindow（`this`）を指定してください。

すべてのパーツを作成し終わったら、`setCentralWidget`を行ってください。

[code]

    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
    {
        QWidget *central = new QWidget(this);
    
        QVBoxLayout *vLayout = new QVBoxLayout();
        vLayout->addWidget(new QLabel("hello", this));
        vLayout->addWidget(new QPushButton("hello2", this));
        QHBoxLayout *hLayout = new QHBoxLayout(central);
        hLayout->addLayout(vLayout);
        hLayout->addWidget(new QPushButton("hello3", this));
    
        setCentralWidget(central);
    }
    
[/code]

