我可以使用Qt执行以下操作:
我需要两个Foo
,一个(孩子)在另一个(父母)的中间,当我更改父QFrame
时,孩子们也会调整大小。
如何设置布局或其他可以做的事情。
如下图所示,黄色是孩子,白色是父母。
答案 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();
}