如何在另一个QFrame中间创建QFrame?

时间:2017-05-24 02:29:39

标签: qt qwidget qtgui qlayout

我可以使用Qt执行以下操作:

我需要两个Foo,一个(孩子)在另一个(父母)的中间,当我更改父QFrame时,孩子们也会调整大小。

如何设置布局或其他可以做的事情。

如下图所示,黄色是孩子,白色是父母。

enter image description here

3 个答案:

答案 0 :(得分:1)

好的,让我们来两个QFrame ......但第一个答案更好。

#include <QApplication>
#include <QFrame>
#include <QHBoxLayout>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QFrame f1;
    f1.setStyleSheet( "background: white" );

    QFrame f2;
    f2.setStyleSheet( "background: yellow" );

    QHBoxLayout l( &f1 );
    l.setContentsMargins( 10, 10, 10, 10);
    l.addWidget( &f2 );

    f1.resize( 200, 200 );
    f1.show();

    return a.exec();
}

答案 1 :(得分:0)

我试图找到一个像下面这样的解决方案。

QFrame *parent_frame = new QFrame(this);//this means parent_frame's parent widget
QFrame *child_frame = new QFrame(parent_frame);

child_frame ->setFixedSize(parent_frame->geometry().width() - 4, parent_frame->geometry().height() - 4);
child_frame ->move(2,2);

并重写parent_frame的父窗口小部件的resizeEvent事件,做同样的事情

child_frame ->setFixedSize(parent_frame->geometry().width() - 4, parent_frame->geometry().height() - 4);
child_frame ->move(2,2);

执行this.show()之后,唯一需要注意做第一个setfixedsize,以便它可以获得正确的宽度和高度。

答案 2 :(得分:-1)

这样的事情怎么样?

#include <QApplication>
#include <QFrame>

namespace {
    static const auto STYLE_SHEET = "QFrame#MyFrame {border: 10px solid white; background: yellow}";
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QFrame f;
    f.setObjectName( QStringLiteral( "MyFrame" ) );
    f.setStyleSheet( STYLE_SHEET );
    f.show();

    return a.exec();
}