QMainWindow和QWidget分别作为主窗体时对Layout的影响

Posted 仆人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QMainWindow和QWidget分别作为主窗体时对Layout的影响相关的知识,希望对你有一定的参考价值。

最新写个小demo的时候,发现个问题,使用水平布局,最后所有的widget都堆在一起了,

分析得出的结论应该是layout出现错误了,

因为我使用qtcreator默认创建的是QMainWindow作为主窗体,

class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    
private:
    Ui::MainWindow *ui;
    
    QListWidget *m_leftList;
    QStackedWidget *m_stack;
    QLabel *label1;
    QLabel *label2;
    QLabel *label3;
};

是继承自QMainWindow的,所以在设置layout的时候需要使用下面的代码:

QWidget *w = new QWidget;
QHBoxLayout *mainLayout = new QHBoxLayout(w);
this->setCentralWidget(w);

完整代码:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    
    QWidget *w = new QWidget;
    QHBoxLayout *mainLayout = new QHBoxLayout(w);
    this->setCentralWidget(w);
    
    m_leftList = new QListWidget(this);
    m_leftList->insertItem(0, tr("window1"));
    m_leftList->insertItem(1, tr("window2"));
    m_leftList->insertItem(2, tr("window3"));
    
    label1 = new QLabel(tr("windows1\n\t by craig"));
    label2 = new QLabel(tr("windows2\n\t by craig"));
    label3 = new QLabel(tr("windows3\n\t by craig"));
    
    m_stack = new QStackedWidget(this);
    m_stack->addWidget(label1);
    m_stack->addWidget(label2);
    m_stack->addWidget(label3);
    
    
    mainLayout->setMargin(5);
    mainLayout->setSpacing(5);
    mainLayout->addWidget(m_leftList);
    mainLayout->addWidget(m_stack, 0, Qt::AlignHCenter);
    mainLayout->setStretchFactor(m_leftList, 1);
    mainLayout->setStretchFactor(m_stack, 3);
    connect(m_leftList, SIGNAL(currentRowChanged(int)), m_stack, SLOT(setCurrentIndex(int)));
    
}

 

看来自己还是基础不扎实,需要多学习!大家可以分享自己的思路,谢谢

以上是关于QMainWindow和QWidget分别作为主窗体时对Layout的影响的主要内容,如果未能解决你的问题,请参考以下文章

QWidget,QMainWindow,QDialog和QFrame的区别

QT中将QWidget提升为QMainWindow

QWidget QMainWindow QDialog 之间的区别

如何从父级不是 QMainWindow 的 QWidget 访问 QMainWindow

setCentralWidget就可以把Qwidget设置为QMainWindow的主窗口

如何在无父 QWidget 中接收 QMainWindow mouseClick 事件?