簡體   English   中英

如何在C ++中的QStack上正確添加QWidget?

[英]how do i add QWidgets properly on a QStack in c++?

我有以下問題。 我想浪費盡可能少的內存,因此每當我在其頂部加載另一個QWidget時,都將其刪除。 例如,我有幾個內容,我想通過按一個按鈕在它們之間切換。

所以我嘗試創建一個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 :: push(QPushButton *);”。

QPushButton繼承自QWidget,所以我只能猜測我應該使用與Java類似的東西作為泛型類型參數的問題。

我在這個主題上進行了搜索,發現這等於<嗎? 擴展T> <? 超級T>在C ++中? 說有一種方法可以為像這樣的泛型類型參數實現函數,但是我不知道如何將其應用於代碼。

我也找到了QStackedWidget類,但是我不想使用這種方法,因為我只能隱藏小部件,而不能刪除它們。 我真的想節省內存,不要在qstackedwidget上加載所有內容。 我是C ++和Qt的新手。 請幫我。 提前致謝

QStack不是您想要的。 相反,請看QStackedWidgetQStackedLayout 您可以在引用鏈接的“詳細描述”部分中找到詳細信息。

您正在嘗試將QWidget *添加到QStack堆棧。

您可以重構您的

QStack<QWidget> *widgetStack;

進入

QStack<QWidget*> *widgetStack;

這應該更好地工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM