在布局中添加前进和后退按钮

Posted

技术标签:

【中文标题】在布局中添加前进和后退按钮【英文标题】:Adding forward and back buttons inside a layout 【发布时间】:2014-10-20 11:52:55 【问题描述】:

我有一个水平布局,我在其中添加了一个组框。使用QSplitter 拆分组框并包含QListWidgetQTextBrowser。我想在窗口的右下角添加两个按钮以在QTextBrowser 内导航。我在布局中添加了两个按钮,但无法在右下角添加它们。这是我的代码:

   _groupBox = new QGroupBox();
   _groupBox->setTitle("Config Help System");
   _verticalLayout = new QVBoxLayout(_groupBox);
   this->setLayout(_verticalLayout);
   _splitter = new QSplitter(_groupBox);
   _splitter->setOrientation(Qt::Horizontal);

   _list = new QListWidget(_splitter);
   QListWidgetItem *item1 = new QListWidgetItem;
   item1->setText("About Config Tool");
   _list->insertItem(0, item1);
   QListWidgetItem *item2 = new QListWidgetItem;
   item2->setText("Configuration Help");
   _list->insertItem(1, item2);
   _list->setSelectionMode(QAbstractItemView::SingleSelection);
   _splitter->addWidget(_list);

   _helpBrowser = new QTextBrowser(_splitter);
   _homeButton = new QPushButton(tr("&Home"), this);
   _backButton = new QPushButton(tr("&Back"), this);
   _closeButton = new QPushButton(tr("&Close"), this);

   QHBoxLayout *buttonLayout = new QHBoxLayout(this);
   buttonLayout->addWidget(_homeButton);
   buttonLayout->addWidget(_backButton);
   buttonLayout->addStretch(1);
   buttonLayout->addWidget(_closeButton)

   _splitter->addWidget(_helpBrowser);
   _splitter->setStretchFactor(1,1);

   _verticalLayout->addWidget(_splitter);
   this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
   this->resize(1000,600);

我已尝试使用拉伸因子来调整按钮以显示在拆分器的右下角。谁能帮帮我?

【问题讨论】:

【参考方案1】:

试试这个(代码略有不同,因为我试图在我的电脑上运行它):

QWidget *www = new QWidget;
QGroupBox*    _groupBox = new QGroupBox();
_groupBox->setTitle("Config Help System");
QVBoxLayout *_verticalLayout = new QVBoxLayout(_groupBox);
www->setLayout(_verticalLayout);
QSplitter *_splitter = new QSplitter(_groupBox);
_splitter->setOrientation(Qt::Horizontal);

QListWidget *_list = new QListWidget(_splitter);
QListWidgetItem *item1 = new QListWidgetItem;
item1->setText("About Config Tool");
_list->insertItem(0, item1);
QListWidgetItem *item2 = new QListWidgetItem;
item2->setText("Configuration Help");
_list->insertItem(1, item2);
_list->setSelectionMode(QAbstractItemView::SingleSelection);
_splitter->addWidget(_list);

QTextBrowser *_helpBrowser = new QTextBrowser(_splitter);
QPushButton* _homeButton = new QPushButton("home");
QPushButton* _backButton = new QPushButton("back");
QPushButton *_closeButton = new QPushButton("close");

QHBoxLayout *buttonLayout = new QHBoxLayout(this);
buttonLayout->addWidget(_closeButton);//new
buttonLayout->addStretch(1);
buttonLayout->addWidget(_homeButton);//new
buttonLayout->addWidget(_backButton);//new


_splitter->addWidget(_helpBrowser);
_splitter->setStretchFactor(1,1);

_verticalLayout->addWidget(_splitter);

_verticalLayout->addLayout(buttonLayout);//new

www->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
www->resize(1000,600);
www->show();

结果:

编辑:

#include <QGroupBox>
#include <QListWidget>
#include <QTextBrowser>
#include <QListWidgetItem>//do different includes to use my code inside main

//...

QHBoxLayout *buttonLayout = new QHBoxLayout;//just remove the parent

【讨论】:

将 HBoxLayout 添加到 VBoxLayout 对我来说效果不佳。我收到一条错误消息,提示 QLayout::AddChildLayout: layout already has a parent @user3035979 不幸的是,如果没有您的代码,就无法说出问题出在哪里,所以我认为您使用我的示例是错误的。尝试将我的示例复制并粘贴到您的主函数中,然后进行连接并删除父级。然后说我很好,否则你仍然会收到这个错误。 我使用了网格布局而不是 vboxlayout 和 hboxlayout。该代码对我来说很好。无论如何感谢您的帮助:)

以上是关于在布局中添加前进和后退按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何将pyqt5中的后退按钮和前进按钮添加到我的QGridLayout

Swift:在锁定屏幕上添加前进/后退 15 秒按钮

用iframe后 点后退按钮时总是在潜套框里后退,如何让整个父页面整体后退呢?

java web系统安全退出后点击浏览器后退按钮还会跳转到刚才浏览页面

js中网页前进和后退的代码

求HTML网页点击UE浏览器上的后退按钮后能回到上一次浏览的网页的代码!