创建一个函数来放置子部件
Creating a function to place child widgets
我正在研究一个项目,该项目需要将多个实例放置在特定区域内。我有麻烦创建一个函数,将为我这样做。现在我必须手动设置每个实例的值。我该如何创建一个函数来获取所有实例并根据半径将它们均匀地放置在一个圆中呢?
这里是我手动设置位置的代码区域。函数setIconWidgetLocation
是我目前拥有的,只是不知道在里面放什么。
zMenuWidget::zMenuWidget(QWidget *parent) :
QWidget(parent)
{
icon1 = new iconWidget(this);
icon2 = new iconWidget(this);
}
void zMenuWidget::resizeEvent(QResizeEvent *event)
{
int yEndPosition = 0;
int outerRadius = 100;
int innerRadius = 60;
QSizeF size = event->size();
QPointF center(size.width(),size.height());
center /= 2.0;
yEndPosition = (outerRadius - innerRadius)/2.0 + innerRadius;
yEndPosition = center.y() - yEndPosition;
int yCurrIconLoc = icon1->rect().center().y();
int xCurrIconLoc = icon1->rect().center().x();
icon1->move(center.x() - xCurrIconLoc, yEndPosition - yCurrIconLoc);
}
void setIconWidgetLocation(iconWidget* w, float angle)
{
}
我相当肯定这正是QLayout
的作用。你可以从它派生出你自己的类,并使用它来径向布局它的小部件。
但只要你现在拥有的,忘了它吧…你只需要简单的布局。您需要遍历所有图标。假设您将它们存储在数组中。
要做到这一点,你需要知道你的圆的半径,这似乎是硬编码的。你可能想要的是在圆上对齐图标中心,所以你需要从你的外半径减去一半的图标大小。但我看到你有内外半径。让我们把图标中心放在中间:int radius = (outerRadius + innerRadius) / 2;
你在这里真正做的是数学。圆圈很容易。你决定每个图标对应的圆弧角度。这取决于你。你可以计算它,这样图标就不会碰撞,或者你可以让它恒定,或者你可以均匀地间隔图标。
但你似乎想要均匀间隔的图标,所以这很容易。每个图标占据饼的一个切片,其弧度为Tau,传统上称为2Pi。
float arcSize = 2.0 * M_PI / numIcons;
每个圆都需要一个圆心和半径。现在你只需要决定从哪里开始。角度0通常位于右侧(radius
的水平偏移和垂直偏移),但您可能希望它位于顶部。我们可以加上四分之一转(Tau/4
),或者我们可以直接翻转数学。
通常圆的公式是:
x = cx + r * cos(angle);
y = cy - r * sin(angle); // Assuming screen co-ordinates
但是如果我想从顶部开始(仍然逆时针旋转),我可以这样做:
x = cx - r * sin(angle); // Flip the minus sign if you want clockwise.
y = cy - r * cos(angle);
现在剩下要做的就是找到所有图标的中心并定位它们:
for( int i = 0; i < numIcons; i++ )
{
// Find icon centre on circle
double x = centreX + radius * sin(arcSize * i);
double y = centreY - radius * cos(arcSize * i);
// Offset to get the top-left of your icon
x -= iconWidth / 2;
y -= iconHeight / 2;
// And position it with your Qt call, whatever that may be.
icon[i]->move(x, y);
}
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何仅为一个函数添加延迟
- 构造函数正在调用一个使用当前类类型的函数
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 如何创建函数管道,以便函数一个接一个地运行?
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 在c++中的复制构造函数/一个声明语句中的初始化的延续中使用chain方法
- C :基类调用自己的虚拟函数 - 一个反图案
- 如何在这个交换函数(一个单独的链表)中找到错误
- 两个相同的函数(一个使用模板模式,另一个不使用)
- 你怎么能一次给一个函数一个参数呢
- 为什么要做两个函数?(一个是非const,另一个是const)
- 当代码在其他地方使用时,如何保证函数一个接一个地被调用