Qt GUI 应用程序问题
我在 Qt 中有一个简单的代码,如下所示:
#include "mainwindow.h"
#include <QWidget>
#include <QGroupBox>
#include <QLabel>
#include <QLineEdit>
#include <QGridLayout>
#include <QVBoxLayout>
class classA;
class classB;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
classA * objA = new classA(this);
classB * objB = new classB(this);
QVBoxLayout * mainLayout = new QVBoxLayout(this);
setLayout(mainLayout);
mainLayout->addWidget(objA);
mainLayout->addWidget(objB);
}
MainWindow::~MainWindow(){}
classA::classA(QWidget *parent) : QWidget(parent)
{
QGroupBox *grupa = new QGroupBox(tr("classA"),this);
QLabel *labelA1 = new QLabel(tr("Label A1"));
QLabel *labelA2 = new QLabel(tr("Label A2"));
QLineEdit *LineEditA1 = new QLineEdit("LineEditA1");
QLineEdit *LineEditA2 = new QLineEdit("LineEditA2");
QGridLayout *lay = new QGridLayout(grupa);
lay->addWidget(labelA1, 0, 0, Qt::AlignLeft);
lay->addWidget(LineEditA1, 0, 1, Qt::AlignLeft);
lay->addWidget(labelA2, 1, 0, Qt::AlignLeft);
lay->addWidget(LineEditA2, 1, 1, Qt::AlignLeft);
grupa->setLayout(lay);
}
classA::~classA(){}
classB::classB(QWidget *parent) : QWidget(parent)
{
QGroupBox *grupa = new QGroupBox(tr("classB"),this);
QLabel *labelB1 = new QLabel(tr("Label B1"));
QLabel *labelB2 = new QLabel(tr("Label B2"));
QLineEdit *LineEditB1 = new QLineEdit("LineEditB1");
QLineEdit *LineEditB2 = new QLineEdit("LineEditB2");
QGridLayout *lay = new QGridLayout(grupa);
lay->addWidget(labelB1, 0, 0, Qt::AlignLeft);
lay->addWidget(LineEditB1, 0, 1, Qt::AlignLeft);
lay->addWidget(labelB2, 1, 0, Qt::AlignLeft);
lay->addWidget(LineEditB2, 1, 1, Qt::AlignLeft);
grupa->setLayout(lay);
}
classB::~classB(){}
结果,我应该看到一个带有间隔良好的元素的窗口。不幸的是,我有这样的事情:
我做错了什么,这些项目的间距不正确?
I have a simple code in Qt, as below:
#include "mainwindow.h"
#include <QWidget>
#include <QGroupBox>
#include <QLabel>
#include <QLineEdit>
#include <QGridLayout>
#include <QVBoxLayout>
class classA;
class classB;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
classA * objA = new classA(this);
classB * objB = new classB(this);
QVBoxLayout * mainLayout = new QVBoxLayout(this);
setLayout(mainLayout);
mainLayout->addWidget(objA);
mainLayout->addWidget(objB);
}
MainWindow::~MainWindow(){}
classA::classA(QWidget *parent) : QWidget(parent)
{
QGroupBox *grupa = new QGroupBox(tr("classA"),this);
QLabel *labelA1 = new QLabel(tr("Label A1"));
QLabel *labelA2 = new QLabel(tr("Label A2"));
QLineEdit *LineEditA1 = new QLineEdit("LineEditA1");
QLineEdit *LineEditA2 = new QLineEdit("LineEditA2");
QGridLayout *lay = new QGridLayout(grupa);
lay->addWidget(labelA1, 0, 0, Qt::AlignLeft);
lay->addWidget(LineEditA1, 0, 1, Qt::AlignLeft);
lay->addWidget(labelA2, 1, 0, Qt::AlignLeft);
lay->addWidget(LineEditA2, 1, 1, Qt::AlignLeft);
grupa->setLayout(lay);
}
classA::~classA(){}
classB::classB(QWidget *parent) : QWidget(parent)
{
QGroupBox *grupa = new QGroupBox(tr("classB"),this);
QLabel *labelB1 = new QLabel(tr("Label B1"));
QLabel *labelB2 = new QLabel(tr("Label B2"));
QLineEdit *LineEditB1 = new QLineEdit("LineEditB1");
QLineEdit *LineEditB2 = new QLineEdit("LineEditB2");
QGridLayout *lay = new QGridLayout(grupa);
lay->addWidget(labelB1, 0, 0, Qt::AlignLeft);
lay->addWidget(LineEditB1, 0, 1, Qt::AlignLeft);
lay->addWidget(labelB2, 1, 0, Qt::AlignLeft);
lay->addWidget(LineEditB2, 1, 1, Qt::AlignLeft);
grupa->setLayout(lay);
}
classB::~classB(){}
As a result, I should see a window with a nicely spaced elements. Unfortunately, I have something like this:
What am I doing wrong that these items will not spaced properly?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
QMainWindow
需要有一个中央小部件。试试这个代码:A
QMainWindow
needs to have a central widget. Try this code:我想首先快速指出这一点:
不需要第二行。如果将 QWidget 传递给 QLayout 的构造函数,则 QLayout 将设置为该 QWidget。
为了回答您的问题,QMainWindow 由各种小部件组成,其中之一是 中央小部件。您需要创建一个新的 QWidget,它充当 QMainWindow 的centralWidget,并由两个自定义 QWidget 组成。
I wanted to point this out really quick first:
The second line is not needed. If you pass a QWidget to the constructor of a QLayout, the QLayout is set to that QWidget.
To answer your question though, a QMainWindow is composed of various widgets, one of which is a centralWidget. You need to create a new QWidget which functions as your QMainWindow's centralWidget and is composed of your two custom QWidgets.