При вызове this-> setvisible (false) в конструкторе QWidget он не обязательно будет скрыт.Здесь я написал минимальный пример, в котором mw будет скрываться, а mw2 - нет.
Однако mw2 все еще можно скрыть позже при вызове соединения.
Почему mw скрывается ине mw2?
Я хочу понять, почему это приложение и как я мог решить его.Я что-то не так делаю?
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
/*
* ui_mainwindow.h is the default generated file for the mainwindow. I just added
* a QVerticalLayout containing a QPushButton and a ScrollArea inside the central widget
* (aka: verticalLayout, pushButton, scrollArea).
*/
#include "ui_mainwindow.h"
#include <QMainWindow>
#include <QTextBrowser>
class MyWidget: public QTextBrowser{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = nullptr)
: QTextBrowser(parent)
{
this->setText("content");
innerHide();
}
void innerHide(){
this->hide();
}
};
class MainWindow : public QMainWindow
{
Q_OBJECT
private:
Ui::MainWindow *ui;
MyWidget* mw2;
public:
explicit MainWindow(QWidget *parent = nullptr):
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
MyWidget* mw = new MyWidget(this); // will hide
mw2 = new MyWidget(this); // call for innerHide but won't hide
ui->verticalLayout->addWidget(mw);
ui->scrollArea->setWidget(mw2);
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(callHide())); // will hide when triggered
}
~MainWindow(){
delete ui;
}
public slots:
void callHide(){
mw2->innerHide();
}
};
#endif // MAINWINDOW_H
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}