我是 Qt 和 C 的新手。我感覺如下:
//1
widget a;
a.show();
//2
widget *b=new widget();
b->show();
我記得小部件類(繼承自 QWidget)有默認建構式。但是,如果我在像這樣的按鈕中使用它:
void MainWindow::on_pushButton_clicked()
{
//widget v;
//v.show();
widget *v=new widget();
v->show();
}
第一個是在 10 毫秒內關閉。是什么導致它們之間的差異?
更新:
我提出這個問題是因為在 qt main 中創建視窗最流行的方法是:
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
它可以作業。這.exec()是一個無限回圈。所以我想知道為什么它不能正常作業......
uj5u.com熱心網友回復:
這是因為在第一個片段中,物件被放置在堆疊上,因此一旦超出范圍就會被破壞。關鍵字將new它放在堆上。這意味著它會delete再次存在,或者退出應用程式。所以你必須考慮這一點,因為如果你不確保你的物件被洗掉,你就會有記憶體泄漏。
這些天來,有很多智能指標(也來自 Qt)可以為您洗掉您的物件。Qt 還將洗掉被洗掉物件的子物件,這也可以幫助您管理記憶體。
這是 C 中非常重要的一點要理解,所以你不應該試圖從 stackoverflow 的答案中學習它:)
在不了解您的應用程式的情況下,我猜測對您來說最好的選擇就是將小部件添加為主視窗的成員變數,并在show()需要時呼叫它。這意味著它與 MainWindow 同時構建。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/469020.html
