В части кода Qt/C++ у меня есть класс QTabWidget с различными вкладками. Я бы хотел добавить последнюю вкладку «+», поэтому, когда пользователь нажимает на нее, я создаю новую вкладку.
Однако я хотел бы, чтобы все мои вкладки были закрыты («x» справа от вкладки), за исключением последнего, где я не хочу, чтобы «x» отображалось. Как я могу получить эту гранулярность в закрываемом флаге?Закрытые вкладки QTabWidget, но не все из них
-1
A
ответ
1
Удивленный, чтобы видеть, что на это еще не дан ответ. Прошло некоторое время, и я применил рабочий пример. Обратите внимание, что вместо того, чтобы использовать одну из вкладок в качестве вашей кнопки «+», я использовал QToolButton
тем самым делая его более простым, чтобы сделать вкладки закрываемые с QTabWidget::setTabsClosable(bool)
mainwindow.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
mainwindow.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();
}
+0
Очень умный, спасибо! –
Возможный дубликат [Закрыть кнопки на для некоторых вкладок в Qt] (http://stackoverflow.com/questions/2616483/close-button-only-for-some-tabs-in-qt) –
Это может быть решением, но не мешает 'x 'для отображения рядом с моим' + ', который я бы хотел избежать. –
Я не понимаю ... Вам не нужно показывать кнопку закрытия одной вкладки - я даю вам решение. Пожалуйста, уточните свой вопрос. –