gpt4 book ai didi

c++ - 稍后初始化的小部件将不会显示在主窗口中

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:38:09 25 4
gpt4 key购买 nike

我正在 MacOS 上使用 Qt 5.13 学习 Qt
首先我定义了继承自QWidgetMyWidgetMyWidget 有一个 QPushButton,但这个按钮将在名为“fresh”的插槽函数中创建,而不是在构造函数中创建。
我在 MainWindow 中添加了 MyWidget(继承自 QMainWindow),并定义了另一个 button_2 来发出信号以调用 MyWidget 的'fresh' 函数来创建按钮。
如果我没有先在 MainWindow 中隐藏 MyWidgetMyWidget 的按钮将不会显示。如果我先隐藏 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();
}

如果我在 mainwindow.cpp 中添加 myWidget->hide(); 似乎是正确的。
如果我删除它,即使我重新绘制或更新或以新功能显示,绿色按钮也不会显示。

最佳答案

'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));

你的按钮也一样。

关于c++ - 稍后初始化的小部件将不会显示在主窗口中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57678067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com