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的区别
QWidget QMainWindow QDialog 之间的区别
如何从父级不是 QMainWindow 的 QWidget 访问 QMainWindow