Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在QGridLayout中正确对齐QLabel?_C++_Qt - Fatal编程技术网

C++ 如何在QGridLayout中正确对齐QLabel?

C++ 如何在QGridLayout中正确对齐QLabel?,c++,qt,C++,Qt,我试图在一个简单的GridLayout中对齐QLabels,但这不起作用,这似乎是Qt5.9中的一个bug 以下是我的片段,所有内容都在QDialog中: MyDialogue::MyDialogue(QWidget *parent) : QDialog(parent) { QLabel *labelA = new QLabel(); labelA->setFixedSize(100, 25); QLabel *labelB = new QLabel(); labelB-&

我试图在一个简单的GridLayout中对齐QLabels,但这不起作用,这似乎是Qt5.9中的一个bug

以下是我的片段,所有内容都在QDialog中:

MyDialogue::MyDialogue(QWidget *parent) : QDialog(parent) {
    QLabel *labelA = new QLabel(); labelA->setFixedSize(100, 25);
    QLabel *labelB = new QLabel(); labelB->setFixedSize(100, 25);
    QLabel *labelC = new QLabel(); labelC->setFixedSize(100, 25);
    QLabel *labelD = new QLabel(); labelD->setFixedSize(100, 25);

    labelA->setStyleSheet("background-color:blue");
    labelB->setStyleSheet("background-color:yellow");
    labelC->setStyleSheet("background-color:purple");
    labelD->setStyleSheet("background-color:green");

    QGridLayout *layout = new QGridLayout(this);    
    layout->addWidget(labelA, 1, 1); 
    layout->addWidget(labelB, 1, 2);
    layout->addWidget(labelC, 2, 1, 2, 2);
    layout->addWidget(labelD, 3, 1, 3, 2);
}
结果是:

好的,我找到了解决方案(我的错误):



我错误地认为,为了沿着两列(labelC和labelD的情况)展开一行,我必须写出起始单元格(2,1)的对应关系,然后是结束单元格(2,2)。我被一个Java布局管理器误导了,它就是这样工作的。这里的记录是,你只需要指出行跨度和列跨度的总数,在我的例子中是2。

如果标签
C
D
重叠,并且你给所有标签指定了相同的固定大小,你的图像看起来和我预期的完全一样。你说“不工作”是什么意思?我看到的结果与您的代码一致。你的目标是什么?如果可能的话,我不希望与跨越两列的最后两行有任何重叠。这可能有助于解释你的错误,而不仅仅是发布正确的代码。好的,我错误地认为,为了沿着两列展开一行(labelC和labelD的情况),我必须编写起始单元格(2,1)的对应项实际位置,然后是结束单元格(2,2)。我被一个Java布局管理器误导了,它就是这样工作的。对于这里的记录,您只需要指出行跨度和列跨度的总数,在我的例子中是2(请参见解决方案)。
MyDialogue::MyDialogue(QWidget *parent) : QDialog(parent) {
    QLabel *labelA = new QLabel();
    QLabel *labelB = new QLabel();
    QLabel *labelC = new QLabel();
    QLabel *labelD = new QLabel();

    labelA->setStyleSheet("background-color:blue");
    labelB->setStyleSheet("background-color:yellow");
    labelC->setStyleSheet("background-color:purple");
    labelD->setStyleSheet("background-color:green");

    QGridLayout *layout = new QGridLayout(this);    
    layout->addWidget(labelA, 1, 1); 
    layout->addWidget(labelB, 1, 2);
    layout->addWidget(labelC, 2, 1, 1, 2);
    layout->addWidget(labelD, 3, 1, 1, 2);
}