按照教程本来应该得到这样的效果
但实际上是这样的效果
窗体本身很窄,怎么调整窗体的尺寸?
代码如下:
#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)));