Qt QLabel和QPushButton对齐

Qt QLabel和QPushButton对齐,qt,qpushbutton,qlabel,Qt,Qpushbutton,Qlabel,我很难对齐多个qt小部件(标签和按钮)。我希望小部件(分别为绿色和红色)对齐。有什么建议吗 #include <QVBoxLayout> #include <QLabel> #include <QPushButton> #include "ui_dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); QVBo

我很难对齐多个qt小部件(标签和按钮)。我希望小部件(分别为绿色和红色)对齐。有什么建议吗

#include <QVBoxLayout>
#include <QLabel>
#include <QPushButton>
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent)
: QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
QVBoxLayout * const layout = new QVBoxLayout(ui->scrollAreaWidgetContents);
for(int i=0; i!=100; ++i)
{
  QLabel *label = new QLabel();
  layout->addWidget(label);
  label->setText(QString::number(i));
  label->setStyleSheet("background-color: red");
  label->setFixedWidth(100);
  QPushButton *pushButton = new QPushButton();
  layout ->addWidget(pushButton);
  int menu_x_pos = label->pos().x();
  int menu_y_pos = label->pos().y();
  pushButton->setGeometry(menu_x_pos+120, menu_y_pos,10,20);
  pushButton->setText(QString::number(i));
  pushButton->setStyleSheet("background-color: green");
  }
  }
  Dialog::~Dialog()
{
  delete ui;
 }
#包括
#包括
#包括
#包括“ui_dialog.h”
Dialog::Dialog(QWidget*父项)
:QDialog(父级),
ui(新建ui::对话框)
{
用户界面->设置用户界面(此);
QVBoxLayout*const layout=新的QVBoxLayout(ui->scrollAreaWidgetContents);
对于(int i=0;i!=100;++i)
{
QLabel*label=新的QLabel();
布局->添加小部件(标签);
label->setText(QString::number(i));
标签->设置样式表(“背景色:红色”);
标签->设置固定宽度(100);
QPushButton*按钮=新的QPushButton();
布局->添加小部件(按钮);
int menu_x_pos=标签->位置().x();
int menu_y_pos=标签->位置().y();
按钮->设置几何图形(菜单x位置+120,菜单y位置,10,20);
按钮->设置文本(QString::number(i));
按钮->设置样式表(“背景色:绿色”);
}
}
对话::~Dialog()
{
删除用户界面;
}

使用
QVBoxLayout
将垂直排列小部件。要水平排列两个小部件,可以使用
QFormLayout

#include <QLabel>
#include <QPushButton>
#include <QFormLayout>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    QFormLayout * const formlayout = new QFormLayout(ui->scrollAreaWidgetContents);
    for(int i=0; i!=100; ++i)
    {
      QLabel *label = new QLabel();
      label->setText(QString::number(i));
      label->setStyleSheet("background-color: red");
      label->setFixedWidth(100);
      QPushButton *pushButton = new QPushButton();
      int menu_x_pos = label->pos().x();
      int menu_y_pos = label->pos().y();
      pushButton->setGeometry(menu_x_pos+120, menu_y_pos,10,20);
      pushButton->setText(QString::number(i));
      pushButton->setStyleSheet("background-color: green");
      formlayout->insertRow(i,label,pushButton);
    }
}

您希望标签和文本居中吗?不希望。我希望它们一个接一个地位于某个位置,因为我打算在按钮和其他小部件之后添加一个复选框。所以,不是这样,QLabel在x=0,长度为100。接下来是x=120的按钮,我想把它设为80长。然后我想把复选框放在220左右,以此类推……你需要在每行添加一个QVBoxLayout来包含标签和按钮。这样做了。杰出的非常感谢。
#include <QLabel>
#include <QPushButton>
#include <QFormLayout>
#include <QCheckBox>
#include <QHBoxLayout>
#include <QLineEdit>
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    QFormLayout * const formlayout = new QFormLayout(ui->scrollAreaWidgetContents);
    QHBoxLayout* hlayout[100];
    QLineEdit* lineEdit[100];
    for(int i=0; i!=100; ++i)
    {
      hlayout[i] = new QHBoxLayout();
      QLabel *label = new QLabel();
      label->setText(QString::number(i));
      label->setStyleSheet("background-color: red");
      label->setFixedWidth(100);
      hlayout[i]->addWidget(label);
      //
      QPushButton *pushButton = new QPushButton();
      int menu_x_pos = label->pos().x();
      int menu_y_pos = label->pos().y();
      pushButton->setGeometry(menu_x_pos+120, menu_y_pos,10,20);
      pushButton->setText(QString::number(i));
      pushButton->setStyleSheet("background-color: green");
      hlayout[i]->addWidget(pushButton);
      //
      QCheckBox *checkbox = new QCheckBox();
      checkbox->setText("CheckB:");
      hlayout[i]->addWidget(checkbox);
      //
      lineEdit[i] = new QLineEdit;
      lineEdit[i]->setText("Text");
      hlayout[i]->addWidget(lineEdit[i]);
// now line up all widgets in a row
      formlayout->insertRow(i,hlayout[i]);
    }
}