我可以使用Qt做以下事情吗:
我需要两个QFrame,一个(子)在另一个(父)的中间,当我改变父QFrame时,子对象也会调整大小。
我如何设置布局或其他事情可以这样做。
就像下面的图片一样,黄色是孩子,白色是父母。

发布于 2017-05-24 15:53:38
好的,让我们成为两个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();
}发布于 2017-05-24 15:53:58
我试着找到一个像下面这样的解决方案。
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,以便它可以获得正确的宽度和高度。
发布于 2017-05-24 14:03:11
像这样怎么样?
#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();
}https://stackoverflow.com/questions/44147958
复制相似问题