GUI 应用程序的 Qt 问题

标签 qt qt4

我在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(){}

因此,我应该看到一个窗口,其中的元素间距合理。不幸的是,我有这样的事情:

alt text

我做错了什么,这些项目没有正确间隔?

最佳答案

QMainWindow 需要有一个中央小部件。试试这个代码:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
  classA * objA = new classA(this);
  classB * objB = new classB(this);

  QWidget * q = new QWidget();
  setCentralWidget(q);
  QVBoxLayout * mainLayout = new QVBoxLayout(this);
  q->setLayout(mainLayout);
  mainLayout->addWidget(objA);
  mainLayout->addWidget(objB);
 }

关于GUI 应用程序的 Qt 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3938037/

相关文章:

c++ - 在不知道文件名的情况下对外部头文件使用 cmake 的 automoc

java - 是否可以使用 Jambi 制作完全原生感觉的 GUI?

c++ - 为什么 QFileInfo::isExecutable() 对 ".msi"文件返回 false?

c++ - QT运行时崩溃

user-interface - Qt4:QAbstractTableModel 拖放,不带 MIME

c++ - 如何在yaml cpp中保留插入顺序

qt - 可执行文件从终端运行,但在应用程序中失败

c++ - QGraphicsView 问题

c++ - MFC 到 QT 的转换

c++ - 如何知道一个文件被打开了? QT