Qt5。我有主課class StartupWizard : public QWizard
而QWizardPages像這樣的:class IntroPage : public QWizardPage
它從設定頁面開始:
setPage(Page_Intro, m_introPage);
setPage(Page_UserData, m_fcsPage);
for (int i = 0; i < m_rolesPages.size(); i ) {
setPage(i 2, m_rolesPages.at(i));
}
setStartId(Page_Intro);
setOption(QWizard::HaveHelpButton);
和方法int nextId() const override;在每個頁面中都被覆寫
一切正常,但是當我想插入一個通用小部件時,例如,按鈕將顯示在QWizardPage我得到的每一個中:

這個按鈕的初始化是:
QVBoxLayout m_lay;
m_lay.addWidget(m_button);
setLayout(&m_lay);
它可能沒有按鈕,我以它為例......
setSideWidget顯示在向導的左側,但我注意頂部。所以我想得到:

問題是,我如何制作一個可以顯示在所有頁面上的小部件?在QWidget我使用layoutsand insertWidget,但我在這里沒有看到它......
當然,我可以將小部件指標發送到所有頁面,但我有其他方法來修復它嗎?
uj5u.com熱心網友回復:
一個可能的解決方案是實作一個放置 QVBoxLayout 的自定義 QWizardPage(并且要顯示相同小部件的頁面必須從該自定義頁面繼承)。每次更改頁面時,小部件都會插入 QVBoxLayout 中。
#include <QApplication>
#include <QLabel>
#include <QLineEdit>
#include <QPointer>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWizardPage>
#include <QDebug>
class BasePage: public QWizardPage{
Q_OBJECT
public:
BasePage(QWidget *parent=nullptr): QWizardPage(parent), m_layout(new QVBoxLayout){
setLayout(m_layout);
}
void setWidget(QWidget * widget){
if(widget)
m_layout->insertWidget(0, widget);
}
QVBoxLayout *verticalLayout() const{
return m_layout;
}
private:
QVBoxLayout *m_layout;
};
class Wizard: public QWizard{
public:
Wizard(QWidget *parent=nullptr): QWizard(parent){
connect(this, &QWizard::currentIdChanged, this, &Wizard::change);
}
QWidget *widget() const{
return m_widget;
}
void setWidget(QWidget *widget){
m_widget = widget;
change();
}
private:
void change(){
if(BasePage *next_page = qobject_cast<BasePage*>(currentPage())){
next_page->setWidget(m_widget);
}
}
QPointer<QWidget> m_widget;
};
class FirstPage: public BasePage{
public:
FirstPage(QWidget *parent=nullptr): BasePage(parent){
verticalLayout()->addWidget(new QLabel("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse id justo vel nibh egestas interdum quis vel massa. Curabitur fringilla dui nibh, in cursus libero luctus et. Nullam hendrerit nunc erat, id tempor augue laoreet vitae."));
verticalLayout()->addWidget(new QLineEdit);
verticalLayout()->addWidget(new QLabel("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse id justo vel nibh egestas interdum quis vel massa. Curabitur fringilla dui nibh, in cursus libero luctus et. Nullam hendrerit nunc erat, id tempor augue laoreet vitae."));
}
};
class SecondPage: public BasePage{
public:
SecondPage(QWidget *parent=nullptr): BasePage(parent){
verticalLayout()->addWidget(new QLineEdit);
verticalLayout()->addWidget(new QLabel("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse id justo vel nibh egestas interdum quis vel massa. Curabitur fringilla dui nibh, in cursus libero luctus et. Nullam hendrerit nunc erat, id tempor augue laoreet vitae."));
verticalLayout()->addWidget(new QLineEdit);
}
};
#include "main.moc"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Wizard wizard;
wizard.setWidget(new QPushButton("Qt is awesome!!!"));
wizard.addPage(new FirstPage);
wizard.addPage(new SecondPage);
wizard.resize(640, 480);
wizard.show();
return a.exec();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/327424.html
