Qt小部件未显示在主窗口中
Qt widgets not showing up in main window
我正在尝试创建主应用程序窗口。它应该有一个菜单栏,并在下面显示一个带有拆分器的标签。我的主窗口代码如下。
我遇到的问题是菜单栏显示,但标签和拆分器不显示。到目前为止我尝试过的事情:1.将拆分器的父级设置为"this"->拆分器显示,但它是在菜单栏上绘制的,并且很小。2.将标签的父标签设置为"this"->标签显示,但在菜单栏上绘制。3.将拆分器的父项设置为"this",父项和标签->标签不显示,我在菜单栏下面画出了拖鞋的缩小版。4.尝试重新排列代码行,得到了各种其他结果,比如在菜单栏上绘制的不随窗口调整大小的大拆分器、菜单栏下面的小拆分器、只有菜单栏而没有其他结果等等——没有任何用处。
看起来垂直布局被完全忽略了。
不知道还能尝试什么。有什么建议吗?
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();
我刚刚遇到了完全相同的问题。我不知道是什么原因造成的,但从QWidget而不是QMainWindow继承似乎已经修复了它。
您需要通过调用setCentralWidget()来设置一个中心小部件。
编辑:将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);
}
相关文章:
- 如果不在窗口 10 中声明名为 openCV 的 openCV namedWindow,QT 图像显示将无法正常工作
- Visual Studio 2017 停止工作,并在打开后显示许多控制台窗口
- 在 GLFW 窗口中显示 FFMPEG 解码帧
- Gtkmm 窗口为空白,不显示任何小部件或标题
- 为什么输出窗口上没有显示输出?
- C++ 窗口显示无框图像
- 如何使用Qt在新窗口中显示视频帧
- 如何以编程方式使窗口全屏显示?
- 强制将以SW_HIDE启动的进程中的窗口显示为STARTUPINFO
- 制作垫子类型对象的数组.输出窗口显示同一帧
- Gtk::在将我的gtkmm2移植到gtkmm3应用程序时,窗口显示并退出
- OpenGL:新窗口显示当前打开的窗口的内容
- WINAPI 创建窗口显示奇怪的结果
- 为什么通过CreateProcess调用的程序的窗口显示为SW_HIDE和CREATE_NO_INDOW
- 输出窗口显示三个图像,而不是一个
- 分窗口显示一个软件,总是在最上面
- WINAPI -窗口显示在调试版本中,而不是在发布版本中
- 在Visual Studio中使用本地Windows调试器运行第一个程序。输出窗口显示大量"Cannot find or open the PDB file"
- 我们如何防止控制台窗口显示在Visual Studio下
- 更新窗口显示OpenGL/GLUT c++