简体   繁体   English

Qt小部件未显示在主窗口中

[英]Qt widgets not showing up in main window

I am trying to create main application window. 我正在尝试创建主应用程序窗口。 It is supposed to have a menu bar, and show one label with splitter underneath. 它应该有一个菜单栏,并在下面显示一个带有分隔符的标签。 My code for main window is below. 我的主窗口代码如下。

The problem I have is that menu bar shows but label and splitter do not. 我的问题是菜单栏显示,但标签和拆分器不显示。 Things I tried so far: 1. Set splitter's parent to "this" -> splitter shows, but is drawn over menu bar and is small. 到目前为止,我尝试过的操作:1.将splitter的父级设置为“ this”-> splitter显示,但是绘制在菜单栏上并且很小。 2. Set label's parent to "this" -> label shows, but is drawn over menu bar. 2.将标签的父级设置为“ this”->显示的标签,但是绘制在菜单栏上。 3. Set parent to "this" for splitter, parent and label ->label doesn't show, I get miniature version of slipper drawn underneath menu bar. 3.将父项设置为“ this”以用于拆分器,父项和标签->标签不显示,我在菜单栏下方绘制了拖鞋的微型版本。 4. Tried reshuffling of code lines and got various other results, like big splitter drawn over menu bar that doesn't resize with window, small splitter underneath menu bar, just menu bar and nothing else, etc -- nothing useful. 4.尝试对代码行进行改组,并得到了其他各种结果,例如在菜单栏上绘制了大拆分器,该拆分器不随窗口调整大小,在菜单栏下方设置了小拆分器,仅菜单栏没有其他内容,等等-没什么用。

Looks like vertical layout is completely ignored. 看起来垂直布局被完全忽略了。

No idea what else to try. 不知道还有什么尝试。 Any suggestions? 有什么建议么?

MyWindow::MyWindow(IViewSignalHandler* signalHandler, QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    m_signalHandler = signalHandler;

    // menu
    m_fileMenu = new QMenu(tr("&File"));
    m_fileMenu->addAction(tr("&Open"), this, SLOT(slot_OpenFile(bool)));

    m_helpMenu = new QMenu(tr("&Help"));
    m_helpMenu->addAction(tr("&About"), this, SLOT(slot_ShowAboutBox(bool)));

    menuBar()->addMenu(m_fileMenu);
    menuBar()->addMenu(m_helpMenu);

    // graph
    m_graphWidget = new QwtPlot();
    m_graphLegend = new QwtLegend();
    m_graphLegend->setItemMode(QwtLegend::CheckableItem);
    m_graphWidget->insertLegend(m_graphLegend, QwtPlot::RightLegend);
    m_graphWidget->setAxisTitle(QwtPlot::xBottom, tr("X"));
    m_graphWidget->setAxisScale(QwtPlot::xBottom, DEFAULT_X_MIN, DEFAULT_X_MAX);
    m_graphWidget->setAxisTitle(QwtPlot::yLeft, tr("Y"));
    m_graphWidget->setAxisScale(QwtPlot::yLeft, DEFAULT_Y_MIN, DEFAULT_Y_MAX);

    QwtPlotZoomer* zoomer = new QwtPlotZoomer(m_graphWidget->canvas());
    zoomer->setTrackerMode(QwtPlotZoomer::AlwaysOn);
    zoomer->setMousePattern(QwtEventPattern::MouseSelect2, Qt::RightButton, Qt::ControlModifier);
    zoomer->setMousePattern(QwtEventPattern::MouseSelect3, Qt::RightButton);

    // path label
    m_label= new QLabel();
    m_label->setTextFormat(Qt::RichText);
    m_label->setWordWrap(false);
    m_label->setText(tr("<b>Label: </b>"));

    // splitter
    m_splitter = new QSplitter();
    m_splitter->setChildrenCollapsible(true);
    m_list = new QListWidget();
    m_splitter->addWidget(m_list);
    m_tree = new QTreeWidget();
    m_splitter->addWidget(m_tree);
    m_text = new QTextEdit();
    m_splitter->addWidget(m_text);
    m_splitter->addWidget(m_graphWidget);

    // page layout
    QVBoxLayout *pageLayout = new QVBoxLayout(this);
    pageLayout->addWidget(m_label);
    pageLayout->addWidget(m_splitter);
    setLayout(pageLayout);
}

[...] [...]

m_mainWindow = new MyWindow(this);
m_mainWindow->show();

I just had the exact same problem. 我只是有完全相同的问题。 I do not know what caused it, but inheriting from QWidget instead of QMainWindow seems to have fixed it. 我不知道是什么原因造成的,但是从QWidget而不是QMainWindow继承似乎已修复了它。

You need to set a central widget by calling setCentralWidget() . 您需要通过调用setCentralWidget()来设置中央窗口小部件。

EDIT: Add a QWidget to your Main Window, set it as central widget, create your layout and finally add it to the central widget. 编辑:将QWidget添加到您的主窗口,将其设置为中央窗口小部件,创建布局,最后将其添加到中央窗口小部件。

MyWindow::MyWindow(IViewSignalHandler* signalHandler, QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
  QWidget *ui_area = new QWidget;
  setCentralWidget(ui_area);

  //.....create your_layout.....

 ui_area->setLayout(your_layout);

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM