稍后初始化的小部件将不会显示在主窗口中
Widget initialized later will not show in MainWindow
我正在学习Qt
在MacOS
上使用Qt 5.13
。
首先,我定义从QWidget
继承MyWidget
。MyWidget
有一个QPushButton
,但这个按钮将在一个名为"fresh"的插槽函数中创建,而不是在构造函数中创建。
我在MainWindow
中添加了MyWidget
(继承自QMainWindow
(,并定义了另一个button_2
来发出信号以调用MyWidget
的"fresh"函数来创建按钮。
如果我没有先MainWindow
中隐藏MyWidget
,MyWidget
的按钮将不会显示。如果我先把MyWidget
藏起来,一切似乎都很好,
我希望知道原因。谢谢
我试图在"新鲜"功能中重新粉刷或更新MyWidget
,但没有帮助。
mywidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include<QPushButton>
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = nullptr);
~MyWidget();
public slots:
void fresh();
private:
QPushButton* myButton;
};
#endif // WIDGET_H
我的小部件.cpp
#include "mywidget.h"
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent)
{
}
MyWidget::~MyWidget()
{
}
void MyWidget::fresh()
{
myButton = new QPushButton(this);
myButton->setStyleSheet("QPushButton { background-color: green;}");
show();
}
主窗口.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include"mywidget.h"
#include<QHBoxLayout>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
signals:
public slots:
private:
MyWidget* myWidget;
};
#endif // MAINWINDOW_H
主窗口.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
QWidget* qwidget = new QWidget;
myWidget = new MyWidget(this);
QPushButton* button = new QPushButton("Show",this);
QHBoxLayout* mainLayout = new QHBoxLayout;
mainLayout->addWidget(myWidget);
mainLayout->addWidget(button);
qwidget->setLayout(mainLayout);
setCentralWidget(qwidget);
//myWidget->hide();
connect(button,&QPushButton::clicked,myWidget,&MyWidget::fresh);
}
主.cpp
#include "mywidget.h"
#include"mainwindow.h"
#include<QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
如果我在主窗口中添加myWidget->hide();
.cpp,这似乎是正确的。
如果我删除它,绿色按钮将不会显示,即使我重新绘制或更新或以全新功能显示。
'mywidget' 正在占用整个空间,如果你想知道它是否占用了所有空间:
mywidget->setStyleSheet("* {border: 4px solid orange;}")
由于您使用的是布局,因此可能需要确定 QPushButton 的最小大小。 QPushButton 具有默认的水平大小策略:"最小值",默认情况下。也许如果您使用此函数设置最小宽度:"setMinimumWidth(int width(",可能会解决您的问题。 另外,不要忘记称之为:
myButton->show();
从 QObject 继承的每个对象都应该用这个函数".show"显示。 以下是QSizePolicy的所有标志将帮助您了解布局中发生的事情(布局与QSizePlicy标志一起使用很多(:https://doc.qt.io/qt-5/qsizepolicy.html#Policy-enum。
除非你不想要布局,否则你必须以这种方式指定位置和大小:
mywidget->setGeometry(QPoint(x, y), QSize(width, height));
你的按钮也是如此。
- 使用 while 循环时不显示窗口
- 有没有办法拿一个opencv显示窗口并将其保存到GUI窗口?
- SDL视频显示窗口:如何连接窗口关闭事件回调
- Qt:缓慢启动时显示窗口内容
- 为什么MessageBox在我创建的桌面中显示窗口,而AllocConsole在上一个桌面中显示它
- 如何显示窗口大小不同的输出图像?通过使用 cv::Mat
- QMLApplicationViewer 多个实例仅首先显示窗口
- 为什么HWND_NOTTOPMOST无法在xp中显示窗口前景
- 基本C++SFML显示窗口错误
- 使用Richedit控件时,基于对话框的Win32 API程序将不会显示窗口
- 显示窗口的极简主义Visual C++应用程序
- Win32:是否可以显示窗口,但在任务栏中隐藏它
- OpenCV-关闭图像显示窗口
- IWebBrowser2在渲染完成后显示窗口
- 防止在调用SDL_SetVideoMode后显示窗口
- 如何使用rad studio显示窗口总数
- Opencv highgui显示窗口
- 使用sfml显示窗口
- 跨平台c++库/库:显示窗口,在屏幕上渲染2D形状,在屏幕上渲染文本
- 用于创建菜单栏的c++ win32程序(程序编译并运行,也显示窗口但不显示菜单栏)