我的QFrame怎么显示不出来?

时间:2021-05-14 08:42:34
在Mainwindow的主窗口里拖入一个gridLayout,头文件定义QFrame *m_parentFrame;QFrame *m_frame[4];
构造里:
m_parentFrame = new QFrame();
ui->gridLayout->addWidget(m_parentFrame);
for(int i = 0; i < 4; i++)
{
m_frame[i] = new QFrame();
m_frame[i]->setParent(m_parentFrame);
showMyFrame();
}
函数showMyFrame()
{
int w = m_parentFrmae->width();
int h = m_parentFrmae->height();
int fw = w/2;
int fh = h/2;
for(int i = 0; i < 4; i++)
{
m_frame[i]->setGeometry(i%2 *fw, i/2 *fh, fw, fh);
m_frame[i]->show();
}
}
我打算让4个Frame按照窗口大小跟随缩放
可是怎么连窗口都显示不出来呢?

11 个解决方案

#1


你的布局用错了,gridLayout只能对m_parentFrame进行调整,管不了他的子控件。应该在m_parentFrame的里面放gridLayout,然后把四个子控件addWidget进去。

#2


引用 1 楼 xiachm 的回复:
你的布局用错了,gridLayout只能对m_parentFrame进行调整,管不了他的子控件。应该在m_parentFrame的里面放gridLayout,然后把四个子控件addWidget进去。

我是对m_parentFrame进行调整,通过ui->gridLayout->addWidget(m_parentFrame);加进来的
然后我在m_parentFrame里显示4个窗口
这样不对吗?刚用qt,多指教!

#3


和你的需求不相符,你现在的写法不能对4个子窗口进行布局。

告诉你个简单的办法,你用Qt设计器做一下试验,把你刚才的设计思路用设计器画一下,看看能不能实现你要的效果

#4


引用 3 楼 xiachm 的回复:
和你的需求不相符,你现在的写法不能对4个子窗口进行布局。

告诉你个简单的办法,你用Qt设计器做一下试验,把你刚才的设计思路用设计器画一下,看看能不能实现你要的效果

不行,跟随不了缩放
怎么才能实现呢?

#5


引用 4 楼 lgstudyvc 的回复:
引用 3 楼 xiachm 的回复:
和你的需求不相符,你现在的写法不能对4个子窗口进行布局。

告诉你个简单的办法,你用Qt设计器做一下试验,把你刚才的设计思路用设计器画一下,看看能不能实现你要的效果

不行,跟随不了缩放
怎么才能实现呢?

我第一个帖子里已经说了,“应该在m_parentFrame的里面放gridLayout,然后把四个子控件addWidget进去。”

意思是,在那个parentFrame里面再放一个gridLayout,把那四个小Frame放到这个布局里

#6


"意思是,在那个parentFrame里面再放一个gridLayout,把那四个小Frame放到这个布局里"

我按照做了,能显示出来,可是不随主窗口缩放啊

#7


把你的ui文件贴出来看看

#8


引用 6 楼 lgstudyvc 的回复:
"意思是,在那个parentFrame里面再放一个gridLayout,把那四个小Frame放到这个布局里"

我按照做了,能显示出来,可是不随主窗口缩放啊


你确定你的窗口上有两个gridLayout吗?一个在parentFrame外面,一个在parentFrame里面,外面那个可以确保窗口在缩放时parentFrame也能缩放。里面那个可以确保parentFrame缩放时四个小Frame也能缩放。

#9


我的MainWindow里有一个gridLayout
在myFrame有一个gridLayout
在MainWindow里用ui->gridLayout->addWidget(m_parentFrame);加入m_parentFrame

在myFrame里
for(int i = 0; i < 4; i++)
{
m_myframe[i] = new QFrame();
m_myframe[i].show();
ui->gridLayout->addwidget(m_myframe[i]);
}
运行能显示,但是不跟随缩放

#10


myFrame是什么?myFrame里有一个gridLayout是什么意思?

另外,楼主,QFrame默认的颜色和窗体是一样的,所以你看不出它是否显示。

我把你的代码整理了一下,跟随缩放是没有问题的。


    m_parentFrame = new QFrame(this);

    ui->gridLayout->addWidget(m_parentFrame);

    for(int i = 0; i < 4; i++)
    {
        m_frame[i] = new QFrame(this);
        m_frame[i]->setStyleSheet("background-color: rgb(255, 0, 0);");
        ui->gridLayout->addWidget(m_frame[i]);
    }


但我目前还不知道你想要什么样的效果。你的描述太简单了,而且不准确。

我不知道你是想把4个frame放到m_parentFrame里面,还是想做别的什么。

如果你想把4个frame放到m_parentFrame里,那我之前的帖子已经说的很清楚了,你需要在m_parentFrame里再放置一个gridLayout。

#11


多谢马林脸!!!

恩,是我的错,好像没有设置窗口属性 

#1


你的布局用错了,gridLayout只能对m_parentFrame进行调整,管不了他的子控件。应该在m_parentFrame的里面放gridLayout,然后把四个子控件addWidget进去。

#2


引用 1 楼 xiachm 的回复:
你的布局用错了,gridLayout只能对m_parentFrame进行调整,管不了他的子控件。应该在m_parentFrame的里面放gridLayout,然后把四个子控件addWidget进去。

我是对m_parentFrame进行调整,通过ui->gridLayout->addWidget(m_parentFrame);加进来的
然后我在m_parentFrame里显示4个窗口
这样不对吗?刚用qt,多指教!

#3


和你的需求不相符,你现在的写法不能对4个子窗口进行布局。

告诉你个简单的办法,你用Qt设计器做一下试验,把你刚才的设计思路用设计器画一下,看看能不能实现你要的效果

#4


引用 3 楼 xiachm 的回复:
和你的需求不相符,你现在的写法不能对4个子窗口进行布局。

告诉你个简单的办法,你用Qt设计器做一下试验,把你刚才的设计思路用设计器画一下,看看能不能实现你要的效果

不行,跟随不了缩放
怎么才能实现呢?

#5


引用 4 楼 lgstudyvc 的回复:
引用 3 楼 xiachm 的回复:
和你的需求不相符,你现在的写法不能对4个子窗口进行布局。

告诉你个简单的办法,你用Qt设计器做一下试验,把你刚才的设计思路用设计器画一下,看看能不能实现你要的效果

不行,跟随不了缩放
怎么才能实现呢?

我第一个帖子里已经说了,“应该在m_parentFrame的里面放gridLayout,然后把四个子控件addWidget进去。”

意思是,在那个parentFrame里面再放一个gridLayout,把那四个小Frame放到这个布局里

#6


"意思是,在那个parentFrame里面再放一个gridLayout,把那四个小Frame放到这个布局里"

我按照做了,能显示出来,可是不随主窗口缩放啊

#7


把你的ui文件贴出来看看

#8


引用 6 楼 lgstudyvc 的回复:
"意思是,在那个parentFrame里面再放一个gridLayout,把那四个小Frame放到这个布局里"

我按照做了,能显示出来,可是不随主窗口缩放啊


你确定你的窗口上有两个gridLayout吗?一个在parentFrame外面,一个在parentFrame里面,外面那个可以确保窗口在缩放时parentFrame也能缩放。里面那个可以确保parentFrame缩放时四个小Frame也能缩放。

#9


我的MainWindow里有一个gridLayout
在myFrame有一个gridLayout
在MainWindow里用ui->gridLayout->addWidget(m_parentFrame);加入m_parentFrame

在myFrame里
for(int i = 0; i < 4; i++)
{
m_myframe[i] = new QFrame();
m_myframe[i].show();
ui->gridLayout->addwidget(m_myframe[i]);
}
运行能显示,但是不跟随缩放

#10


myFrame是什么?myFrame里有一个gridLayout是什么意思?

另外,楼主,QFrame默认的颜色和窗体是一样的,所以你看不出它是否显示。

我把你的代码整理了一下,跟随缩放是没有问题的。


    m_parentFrame = new QFrame(this);

    ui->gridLayout->addWidget(m_parentFrame);

    for(int i = 0; i < 4; i++)
    {
        m_frame[i] = new QFrame(this);
        m_frame[i]->setStyleSheet("background-color: rgb(255, 0, 0);");
        ui->gridLayout->addWidget(m_frame[i]);
    }


但我目前还不知道你想要什么样的效果。你的描述太简单了,而且不准确。

我不知道你是想把4个frame放到m_parentFrame里面,还是想做别的什么。

如果你想把4个frame放到m_parentFrame里,那我之前的帖子已经说的很清楚了,你需要在m_parentFrame里再放置一个gridLayout。

#11


多谢马林脸!!!

恩,是我的错,好像没有设置窗口属性