В фрагменте кода Qt/С++ у меня есть класс QTabWidget с разными вкладками. Я хотел бы добавить последнюю вкладку "+", поэтому, когда пользователь нажимает на нее, я создаю новую вкладку.
Однако я хотел бы, чтобы все мои вкладки закрывались ("x" справа от вкладки ), за исключением последнего, где я не хочу, чтобы отображался «x». Как я могу иметь эту гранулярность в закрывающемся флаге?
Закрываемые вкладки QTabWidget, но не все
comment
Возможный дубликат кнопки "Закрыть" только для некоторых вкладок в Qt
- person Dmitry Sazonov   schedule 24.02.2016
comment
Это может быть решением, но не мешает отображать «x» рядом с моим «+», чего я хотел бы избежать.
- person Laurent Crivello   schedule 24.02.2016
comment
Я не понимаю... Вам не нужно показывать кнопку закрытия для одной вкладки - я даю вам решение. Пожалуйста, уточните свой вопрос.
- person Dmitry Sazonov   schedule 24.02.2016
comment
Это правда. Если открыто 5 вкладок, я хочу, чтобы на 4 первых отображалась кнопка закрытия «x», а на 5-й вкладке ничего не было.
- person Laurent Crivello   schedule 24.02.2016
Ответы (1)
Удивлен, увидев, что на это еще не ответили. Было немного времени, и я реализовал рабочий пример. Обратите внимание, что вместо того, чтобы использовать одну из вкладок в качестве кнопки «+», я использовал QToolButton
, тем самым упрощая закрытие вкладок с помощью QTabWidget::setTabsClosable(bool)
главное окно.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTabWidget>
#include <QToolButton>
#include <QLabel>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QTabWidget* _pTabWidget;
private slots:
void slotAddTab();
void slotCloseTab(int);
};
#endif // MAINWINDOW_H
главное окно.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
_pTabWidget = new QTabWidget(this);
this->setCentralWidget(_pTabWidget);
// Create button what must be placed in tabs row
QToolButton* tb = new QToolButton(this);
tb->setText("+");
// Add empty, not enabled tab to tabWidget
_pTabWidget->addTab(new QLabel("Add tabs by pressing \"+\""), QString());
_pTabWidget->setTabEnabled(0, false);
// Add tab button to current tab. Button will be enabled, but tab -- not
_pTabWidget->tabBar()->setTabButton(0, QTabBar::RightSide, tb);
// Setting tabs closable and movable
_pTabWidget->setTabsClosable(true);
_pTabWidget->setMovable(true);
connect(tb,SIGNAL(clicked()),this,SLOT(slotAddTab()));
connect(_pTabWidget,SIGNAL(tabCloseRequested(int)),this,SLOT(slotCloseTab(int)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::slotAddTab()
{
QWidget* newTab = new QWidget(_pTabWidget);
_pTabWidget->addTab(newTab, tr("Tab %1").arg(QString::number(_pTabWidget->count())));
_pTabWidget->setCurrentWidget(newTab);
}
void MainWindow::slotCloseTab(int index)
{
delete _pTabWidget->widget(index);
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
person
Nithish
schedule
03.03.2016
Кажется, нужно добавить
#include <QTabBar>
в mainwindow.h, иначе создатель Qt сообщит об ошибке: использование неопределенного типа 'QTabBar'
- person Wade Wang; 12.07.2021