当前位置: 代码迷 >> QT开发 >> 这两种模式设置对话框的layout有什么区别
  详细解决方案

这两种模式设置对话框的layout有什么区别

热度:286   发布时间:2016-04-25 02:54:38.0
这两种方式设置对话框的layout有什么区别
第一种方式是选中整个对话框,然后应用水平layout,

得到的代码如下:
class Ui_Dialog
{
public:
    QHBoxLayout *horizontalLayout;
    QPushButton *pushButton1;
    QPushButton *pushButton2;

    void setupUi(QDialog *Dialog)
    {
        if (Dialog->objectName().isEmpty())
            Dialog->setObjectName(QStringLiteral("Dialog"));
        Dialog->resize(286, 191);
        horizontalLayout = new QHBoxLayout(Dialog);
        horizontalLayout->setSpacing(6);
        horizontalLayout->setContentsMargins(11, 11, 11, 11);
        horizontalLayout->setObjectName(QStringLiteral("horizontalLayout"));
        pushButton1 = new QPushButton(Dialog);
        pushButton1->setObjectName(QStringLiteral("pushButton1"));

        horizontalLayout->addWidget(pushButton1);

        pushButton2 = new QPushButton(Dialog);
        pushButton2->setObjectName(QStringLiteral("pushButton2"));

        horizontalLayout->addWidget(pushButton2);


        retranslateUi(Dialog);

        QMetaObject::connectSlotsByName(Dialog);
    } // setupUi


第二种方式中选中对话框上的对象,然后应用布局,

代码如下:
class Ui_Dialog
{
public:
    QWidget *widget;
    QHBoxLayout *horizontalLayout;
    QPushButton *pushButton1;
    QPushButton *pushButton2;

    void setupUi(QDialog *Dialog)
    {
        if (Dialog->objectName().isEmpty())
            Dialog->setObjectName(QStringLiteral("Dialog"));
        Dialog->resize(286, 191);
        widget = new QWidget(Dialog);
        widget->setObjectName(QStringLiteral("widget"));
        widget->setGeometry(QRect(40, 80, 158, 25));
        horizontalLayout = new QHBoxLayout(widget);
        horizontalLayout->setSpacing(6);
        horizontalLayout->setContentsMargins(11, 11, 11, 11);
        horizontalLayout->setObjectName(QStringLiteral("horizontalLayout"));
        horizontalLayout->setContentsMargins(0, 0, 0, 0);
        pushButton1 = new QPushButton(widget);
        pushButton1->setObjectName(QStringLiteral("pushButton1"));

        horizontalLayout->addWidget(pushButton1);

        pushButton2 = new QPushButton(widget);
        pushButton2->setObjectName(QStringLiteral("pushButton2"));

        horizontalLayout->addWidget(pushButton2);


        retranslateUi(Dialog);

        QMetaObject::connectSlotsByName(Dialog);
    } // setupUi


从运行的结果来看,第一种方式,调整对话框大小的时候,按钮会跟着调整。但是对于原理,还是不太清楚。
而且我感觉,应该调用widget->setLayout(horizontalLayout); 而生成的代码中没有调用。这是为什么呢?
------解决思路----------------------
  要用到哪一种方式就选那种呗,原理这东西完全搞懂会很慢的,况且还很花时间。个人观点哦
------解决思路----------------------
 horizontalLayout = new QHBoxLayout(Dialog); 
就等同于:
 horizontalLayout = new QHBoxLayout();
 Dialog->seLayout(horizontalLayout );

//实际上QLayout构造函数中调用了parent->seLayout(this);

因此第一种是两个按钮直接布局在Dialog中,所以会随窗体大小变化。

而第二种布局会自动创建子窗口widget,而widget在Dialog没有布局,大小不受Dialog约束,属于float状态。
  相关解决方案