当前位置: 代码迷 >> QT开发 >> 关于Qt的格局
  详细解决方案

关于Qt的格局

热度:248   发布时间:2016-04-25 03:04:08.0
关于Qt的布局
本意是想设计一个带菜单栏等的QMainWindow主窗口的程序,其中主界面是由一个QSplitter分割的两个部分,分别用作不同的显示,但是按照我现在的程序代码由QSplitter分割的两个部分一直无法正确显示,只能在主界面的左上角显示,而且不能移动。
下面是我程序的部分代码,请大家帮忙看看啊!
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

mainwindows.cpp
#include "mainwindow.h"
#include "QtWidgets"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QSplitter *splitterMain = new QSplitter(Qt::Horizontal,this);
    m_echoarea = new EchoArea(this);
    m_sjshow = new SJShow(this);

    splitterMain->addWidget(m_echoarea);
    splitterMain->addWidget(m_sjshow);
    splitterMain->setStretchFactor(0, 3);
    splitterMain->setStretchFactor(1, 1);
    QGridLayout *layout = new QGridLayout(this);
    layout->addWidget(splitterMain);
    setLayout(layout);

    createActions();
    createMenus();

}

MainWindow::~MainWindow()
{

}
void MainWindow::createActions()
{
    newAction = new QAction(tr("&New"), this);
    newAction->setIcon(QIcon("./images/Adium.png"));
    newAction->setShortcut(tr("Ctrl+N"));
    newAction->setStatusTip(QString("Create a new file."));
    QObject::connect(newAction, SIGNAL(triggered()), qApp, SLOT(aboutQt()));

    openAction = new QAction(tr("&Open"), this);
    saveAction = new QAction(tr("&Save"), this);
    saveAsAction = new QAction(tr("Save as"), this);
}

void MainWindow::createMenus()
{
    fileMenu = menuBar()->addMenu(tr("&File"));
    fileMenu->addAction(newAction);
    fileMenu->addAction(openAction);
    fileMenu->addSeparator();
    fileMenu->addAction(saveAction);
    fileMenu->addAction(saveAsAction);

    editMenu = menuBar()->addMenu(tr("&Edit"));
    editMenu->addAction(newAction);
    editMenu->addAction(openAction);
    editMenu->addAction(saveAction);
    editMenu->addAction(saveAsAction);
}

sjshow.cpp
#include "sjshow.h"

SJShow::SJShow(QWidget *parent) :QWidget(parent)
{
    setPalette(QPalette(Qt::black));
    setAutoFillBackground(true);
}
echoarea.cpp
#include "echoarea.h"

EchoArea::EchoArea(QWidget *parent) :QWidget(parent)
{
    setPalette(QPalette(Qt::white));
    setAutoFillBackground(true);
}
------解决思路----------------------
正确的用法:

QSplitter *splitterMain = new QSplitter(Qt::Horizontal,this);
     m_echoarea = new EchoArea(this);
     m_sjshow = new SJShow(this);

     splitterMain->addWidget(m_echoarea);
     splitterMain->addWidget(m_sjshow);
     splitterMain->setStretchFactor(0, 3);
     splitterMain->setStretchFactor(1, 1);
   
setCentralWidget(m_splitterMain );
  相关解决方案