我有以下問題。我想浪費盡可能少的內存,因此每當我加載另一個QWidget時,都會刪除底層的QWidget。例如。我有幾個內容,我想通過按下按鈕在它們之間切換。如何在QStack中正確添加QWidgets?
所以我試圖創建一個QStack,並添加QWidgets,只要有適當的按鈕點擊。同時我試圖刪除以前不再顯示的小部件。
/*header file*/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QStack>
namespace Ui
{
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0); //Konstruktor
~MainWindow(); //Destruktor
QStack<QWidget> *widgetStack;
private:
Ui::MainWindow *ui;
private slots:
void on_clickToProceedButton_clicked();
void on_Rand_Taster_Anmeldung_clicked();
void on_Rand_Taster_Anael_clicked();
void on_Rand_Taster_Power_clicked();
};
#endif
/*cpp file*/
#include "headerFiles/mainwindow.h"
#include "ui_mainwindow.h"
#include "headerFiles/authentication.h"
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
widgetStack = new QStack<QWidget>();
widgetStack->push(ui->clickToProceedButton);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_clickToProceedButton_clicked()
{
Authentication *auth = new Authentication(this);
ui->verticalLayout->addWidget(auth);
ui->verticalLayout->removeWidget(widgetStack->pop());
widgetStack->push(auth);
}
/*header file, rest of the code is not important, just that it is a QWidget*/
class Authentication : public QWidget
當我運行此程序,它說,「有一個調用「QStack ::推(QPushButton *)沒有匹配功能;」
QPushButton從QWidget繼承,所以我只能猜測我應該用什麼類似於java中的東西作爲泛型類型參數的問題。
我在這個主題上搜索了一下,發現這個Is there equivalent of <? extends T> <? super T> in c++?說有一種方法可以像這樣爲泛型類型參數實現一個函數,但是我看不到如何將它應用到我的代碼中。
我也發現類QStackedWidget,但這是我不想使用這種方法,我只能隱藏小部件,但不能刪除它們。我真的想要節省內存,並且不要在qstackedwidget上加載所有內容。 我是新來的c + +和Qt。請幫幫我。提前致謝
你可能想'QStack widgetStack;'而不是'QStack * widgetStack;' –
Rostislav