当前位置: 代码迷 >> QT开发 >> QT5.5-on-linux, 堆栈窗体QStackedWidget类进展布局时未能成功,新人求教
  详细解决方案

QT5.5-on-linux, 堆栈窗体QStackedWidget类进展布局时未能成功,新人求教

热度:452   发布时间:2016-04-25 02:52:25.0
QT5.5-on-linux, 堆栈窗体QStackedWidget类进行布局时未能成功,新人求教
按照教程本来应该得到这样的效果

但实际上是这样的效果

窗体本身很窄,怎么调整窗体的尺寸?
代码如下:
#include "stackdlg.h"
#include <QHBoxLayout>

StackDlg::StackDlg(QWidget *parent)
    : QMainWindow(parent)
{
    setWindowTitle(tr("StackedWidget"));
    list =new QListWidget(this);
    list->insertItem(0,tr("Window1"));
    list->insertItem(1,tr("Window2"));
    list->insertItem(2,tr("Window3"));

    label1 =new QLabel(tr("WindowTest1"));
    label2 =new QLabel(tr("WindowTest2"));
    label3 =new QLabel(tr("WindowTest3"));

    stack =new QStackedWidget(this);
    stack->addWidget(label1);
    stack->addWidget(label2);
    stack->addWidget(label3);

    QHBoxLayout *mainLayout =new QHBoxLayout(this);
    mainLayout->addWidget(list);
    mainLayout->addWidget(stack, 0, Qt::AlignRight);
    mainLayout->setMargin(5);
    mainLayout->setSpacing(5);
    mainLayout->setStretchFactor(list,1);
    mainLayout->setStretchFactor(stack,3);
    connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
}

StackDlg::~StackDlg()
{

}

QT新手,虚心求教~~
------解决思路----------------------
引用:
按照教程本来应该得到这样的效果

但实际上是这样的效果

窗体本身很窄,怎么调整窗体的尺寸?
代码如下:
#include "stackdlg.h"
#include <QHBoxLayout>

StackDlg::StackDlg(QWidget *parent)
    : QMainWindow(parent)
{
    setWindowTitle(tr("StackedWidget"));
    list =new QListWidget(this);
    list->insertItem(0,tr("Window1"));
    list->insertItem(1,tr("Window2"));
    list->insertItem(2,tr("Window3"));

    label1 =new QLabel(tr("WindowTest1"));
    label2 =new QLabel(tr("WindowTest2"));
    label3 =new QLabel(tr("WindowTest3"));

    stack =new QStackedWidget(this);
    stack->addWidget(label1);
    stack->addWidget(label2);
    stack->addWidget(label3);

    QHBoxLayout *mainLayout =new QHBoxLayout(this);
    mainLayout->addWidget(list);
    mainLayout->addWidget(stack, 0, Qt::AlignRight);
    mainLayout->setMargin(5);
    mainLayout->setSpacing(5);
    mainLayout->setStretchFactor(list,1);
    mainLayout->setStretchFactor(stack,3);
    connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
}

StackDlg::~StackDlg()
{

}

QT新手,虚心求教~~


在你设置布局的前后加三句话
QWidget *widget = new QWidget();
    this->setCentralWidget(widget);


    QHBoxLayout *mainLayout =new QHBoxLayout;
    mainLayout->addWidget(list);
    mainLayout->addWidget(stack,0,Qt::AlignRight);
    mainLayout->setMargin(5);
    mainLayout->setSpacing(5);
    mainLayout->setStretchFactor(list,1);
    mainLayout->setStretchFactor(stack,3);

    centralWidget()->setLayout(mainLayout);
因为你继承的是QMainWindow,本身已经有布局了,所以会有问题。或者你可以重新建个项目,继承QDialog就不会有这个问题了。
------解决思路----------------------
我这里没啥问题,可能是因为你的不是在windows系统下,自己多试试,例如:固定list的宽高
    setWindowTitle(tr("StackedWidget"));
    QListWidget *list = new QListWidget(this);
    list->insertItem(0,tr("Window1"));
    list->insertItem(1,tr("Window2"));
    list->insertItem(2,tr("Window3"));

    QLabel *label1 = new QLabel(tr("WindowTest1"));
    label1->setAlignment(Qt::AlignCenter);
    QLabel *label2 = new QLabel(tr("WindowTest2"));
    label2->setAlignment(Qt::AlignCenter);
    QLabel *label3 = new QLabel(tr("WindowTest3"));
    label3->setAlignment(Qt::AlignCenter);

    QStackedWidget *stack = new QStackedWidget(this);
    stack->addWidget(label1);
    stack->addWidget(label2);
    stack->addWidget(label3);

    QHBoxLayout *mainLayout = new QHBoxLayout(this);
    mainLayout->addWidget(list, 1);
    mainLayout->addWidget(stack, 3);
    mainLayout->setMargin(5);
    mainLayout->setSpacing(5);
    connect(list, SIGNAL(currentRowChanged(int)), stack, SLOT(setCurrentIndex(int)));