该文章对布局相关的知识点进行总结。
- 在一个ui已经设计布局的情况下,一个子页面或者子控件显示到该ui中,是否会打破原有布局?
假设一个ui界面整体设计为水平布局,如果这个时候创建一个新的子界面或者子控件,并且设该子控件或者子界面的父控件为该ui界面,意思是该控件需要显示该ui对应的窗口中,这种情况下新的子控件或者子界面是否受原来的布局的影响或者破坏原有的布局?
结论:不受影响,并不会破坏原有的布局,界面可以正常显示。
工程下载地址:工程链接
代码如下:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class mywidget;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::MainWindow *ui;
mywidget* m_widget;
};
#endif // MAINWINDOW_H
mainwindow.cpp如下所示:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mywidget.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//通过该项目的验证说明了如果一个ui设计了布局,如果重新生成了一个子界面,并且设计该布局的页面为新控件的父控件,zai
//这种情况下子界面不受布局的影响
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
m_widget = new mywidget(this);
m_widget->setGeometry(QRect(100,100,400,300));
m_widget->show();
}
void MainWindow::on_pushButton_2_clicked()
{
if(m_widget)
m_widget->hide();
}
mywidget.h代码如下:
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
namespace Ui {
class mywidget;
}
class mywidget : public QWidget
{
Q_OBJECT
public:
explicit mywidget(QWidget *parent = 0);
~mywidget();
private:
Ui::mywidget *ui;
};
#endif // MYWIDGET_H
mywidget.cpp代码:
#include "mywidget.h"
#include "ui_mywidget.h"
mywidget::mywidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::mywidget)
{
ui->setupUi(this);
setAttribute(Qt::WA_StyledBackground);
}
mywidget::~mywidget()
{
delete ui;
}
main.cpp如下所示:
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
效果显示: