QT中的建立一个界面为QMainwindow的主界面,如果想在主界面中手动添加MenuBar,同时再添加别的控件时,一定要定义一个QWidget的控件,把除了MenuBar之外的控件放到QWidget中,否则绘制出来的界面中控件会覆盖已有的菜单栏。举个栗子,具体代码如下:
void MainWindow::InitializeWindow()
{
//设置窗口的图标和名称
setWindowIcon(QIcon(":/icon.ico"));
setWindowTitle(tr("新闻推荐系统"));
//自定义QLabel控件
m_lblLeft = new QLabel(tr("<b>文章关键字列表 </b>"));
m_lblRight =new QLabel(tr("<b>关键字向量 </b>"));
m_lblRcmd1 = new QLabel(tr("<b>推荐结果1 </b>"));
m_lblRcmd2 = new QLabel(tr("<b>推荐结果2 </b>"));
//主窗口中添加一个Widget,将所有控件放入Widget,其中setCentralWidget()设置该widget为当前窗口的widget
m_widget = new QWidget();
this->setCentralWidget(m_widget);
//设置窗口的布局,QGridLayout中的参数分别是(控件名称,控件所在的行号,控件所在的列号)
QGridLayout* gridLayout = new QGridLayout;
gridLayout->addWidget(m_lblLeft,0,0);
gridLayout->addWidget(m_lblRight,0,1);
gridLayout->addWidget(m_lblRcmd1,2,0);
gridLayout->addWidget(m_lblRcmd2,2,1);
//把新建的Widget的布局设置为gridLayout
m_widget->setLayout(gridLayout);
}
下面是初始化窗口的代码,其中新建了一个QWidget函数,同时调用setCentralWidget(QWidget* )来实现设置了QMainWindow的CentralWidget
@requires_authorization
void MainWindow::InitializeWindow()
{
//设置窗口的图标和名称
setWindowIcon(QIcon(":/icon.ico"));
setWindowTitle(tr("新闻推荐系统"));
//自定义QLabel控件
m_lblLeft = new QLabel(tr("<b>文章关键字列表 </b>"));
m_lblRight =new QLabel(tr("<b>关键字向量 </b>"));
m_lblRcmd1 = new QLabel(tr("<b>推荐结果1 </b>"));
m_lblRcmd2 = new QLabel(tr("<b>推荐结果2 </b>"));
//主窗口中添加一个Widget,将所有控件放入Widget,其中setCentralWidget()设置该widget为当前窗口的widget
m_widget = new QWidget();
this->setCentralWidget(m_widget);
//设置窗口的布局,QGridLayout中的参数分别是(控件名称,控件所在的行号,控件所在的列号)
QGridLayout* gridLayout = new QGridLayout;
gridLayout->addWidget(m_lblLeft,0,0);
gridLayout->addWidget(m_lblRight,0,1);
gridLayout->addWidget(m_lblRcmd1,2,0);
gridLayout->addWidget(m_lblRcmd2,2,1);
//把新建的Widget的布局设置为gridLayout
m_widget->setLayout(gridLayout);
}
完成以上两步的设置,QMainWindow中的窗口的菜单栏不会被其他手动添加的控件给覆盖了