首页 > 代码库 > QMainWindow和QWidget分别作为主窗体时对Layout的影响
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的影响
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。