本意是想设计一个带菜单栏等的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 );