Qt : 主窗口中添加布局和刪除布局的問題.


1.主窗口添加布局.

都知道在QWidget中,進行布局很簡單,直接類似如下即可:

    QPushButton *firstButton = new QPushButton();
    QPushButton *secondButton = new QPushButton();
    QPushButton *lastButton = new QPushButton();

    //直接設置當前的布局.
    QHBoxLayout *layout = new QHBoxLayout(this);
    layout->addWidget(firstButton);
    layout->addWidget(secondButton);
    layout->addWidget(lastButton);

但是當應用在主窗口時,這樣使用卻沒有效果…這是因為,主窗口默認是包含菜單欄,工具欄,中心窗口,狀態欄等,而我們設置的布局不應該應用在整個主窗口中,而是應該對中心窗口使用.所以我們得到如下代碼來設置布局:

    QPushButton *firstButton = new QPushButton();
    QPushButton *secondButton = new QPushButton();
    QPushButton *lastButton = new QPushButton();

    QHBoxLayout *layout = new QHBoxLayout(this);
    layout->addWidget(firstButton);
    layout->addWidget(secondButton);
    layout->addWidget(lastButton);

    //創建一個窗口.設置窗口的布局.
    QWidget *widget = new QWidget(this);
    widget->setLayout(layout);
    //然后對主窗口設置新的中心窗口.也就是你布局好的窗口.
    this->setCentralWidget(widget);

2.刪除原有布局.設置新的布局.
在主窗口中如果你想要刪除之前的布局,而使用新的布局,那非常的簡單,因為之前已經說了,主窗口內的是個中心窗口,所以只需要創建一個新的Widget,然后重新設置中心窗口即可.(不推薦!)

    QPushButton *firstButton = new QPushButton();
    QPushButton *secondButton = new QPushButton();
    QPushButton *lastButton = new QPushButton();

    QHBoxLayout *layout = new QHBoxLayout();
    layout->addWidget(firstButton);
    layout->addWidget(secondButton);
    layout->addWidget(lastButton);

    QWidget *widget = new QWidget();
    widget->setLayout(layout);
    this->setCentralWidget(widget);
    //重新創建一個窗體.
    QWidget *newWidget = new QWidget();
    QHBoxLayout *newLayout = new QHBoxLayout();
    newLayout->addWidget(firstButton);
    newLayout->addWidget(secondButton);
    newWidget->setLayout(newLayout);
    this->setCentralWidget(newWidget);

    delete widget;

但是上述方法看起來太蠢了,最重要的是雖然用戶想要改變整體布局,但是卻依舊使用同樣的小控件,比如QLineEdit,QLabel,QPushButton等.那么新建QWidget的方法肯定是不可取的.所以我們可以直接修改原窗體的布局.

QPushButton *firstButton = new QPushButton();
    QPushButton *secondButton = new QPushButton();
    QPushButton *lastButton = new QPushButton();

    QHBoxLayout *layout = new QHBoxLayout();
    layout->addWidget(firstButton);
    layout->addWidget(secondButton);
    layout->addWidget(lastButton);

    QWidget *widget = new QWidget();
    widget->setLayout(layout);
    this->setCentralWidget(widget);

    //必須要先釋放原來的布局!!!否則會出現下圖結果:
    delete widget->layout();
    //這里修改為縱向布局了.
    QVBoxLayout *c = new QVBoxLayout();
    c->addWidget(firstButton);
    c->addWidget(secondButton);
    c->addWidget(lastButton);
    widget->setLayout(c);

//試圖把一個布局設置到一個已經有布局的窗口中.

根據上面的方法,就可以在主窗口中添加和刪除布局啦~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM