如何在Qt的整个主窗口中设置中心窗口小部件

时间:2018-05-09 12:23:33

标签: c++ qt borderless

我有一个像这样的最小例子:

#include <iostream>

using namespace std;
long double fact(int);
int main()
{
    long double a;
    long double sum = 0;
    cout << "Enter value of x " << endl;
    cin >> a;
    for (long c = 2; c <= 12; c++)
    {
        if (c % 2 == 0)
        {
            sum = sum + (pow(a, c) / fact(c));
            if (sum < 0)
            {
                sum=sum*-1;
            }
        }
        else
            continue;
    }
    cout << "The answer is " << 1 + sum << endl;
    system("pause");
    return 0;
}
long double fact(int x)
{
    int n = 1, fact;
    for (n; n <= x; n++)
    {
        if (n == 1)
    {
            fact = 1;
    }
        else
    {
            fact = fact * n;
    }
}
    return fact;
}

enter image description here

从上图中可以看出,除mWidget = new QWidget; vLayout = new QVBoxLayout; mLabel = new QLabel; mLabel->setText("Text"); mLabel->setAlignment(Qt::AlignCenter); mLabel->setStyleSheet("QLabel { border: 2px solid red; }"); this->setCentralWidget(mWidget); mWidget->setLayout(vLayout); vLayout->addWidget(mLabel); 外,红色边框外还有一些白色边框。我想要做的是让中央小部件填充整个主窗口,因此红色边框外没有白色边框。也许以另一种方式说是建立一个无边框窗口(不知道无边界窗口是否是我正在寻找的)。我搜索了如何制作无边框窗口,我尝试了central widget,但这不是我想要的。我现在很困惑如何实现这一目标?我应该研究的主题setWindowFlags(Qt::FramelessWindowHint)是什么?如果是的话,这是否意味着我应该调用一些windows api来使其工作?或者我应该用其他一些Qt方法做到这一点?

希望有人可以给我一个方法或给我一些提示。感谢。

2 个答案:

答案 0 :(得分:1)

为什么使用QMainWindow?似乎人们在不考虑它的用途的情况下使用该类。如果您有工具栏,状态栏或停靠子窗口,那么只会想要使用QMainWindow。否则它毫无意义。你想要的是“中央小部件”是唯一的小部件,而不是嵌入在主窗口中。如果您是在.ui文件中设计的,则必须手动编辑它才能将课程更改为QWidget,并完全删除介入的centralWidget。{/ p>

答案 1 :(得分:0)

根据你的问题QMainwindow框架几何和QLable几何应该调整。所以你可以使用下面这样的线代码。

setGeometry(0,0,320,280);
ui->label->setGeometry(0,0,320,245);