2016-02-24 2 views
-1

В части кода Qt/C++ у меня есть класс QTabWidget с различными вкладками. Я бы хотел добавить последнюю вкладку «+», поэтому, когда пользователь нажимает на нее, я создаю новую вкладку.
Однако я хотел бы, чтобы все мои вкладки были закрыты («x» справа от вкладки), за исключением последнего, где я не хочу, чтобы «x» отображалось. Как я могу получить эту гранулярность в закрываемом флаге?Закрытые вкладки QTabWidget, но не все из них

+0

Возможный дубликат [Закрыть кнопки на для некоторых вкладок в Qt] (http://stackoverflow.com/questions/2616483/close-button-only-for-some-tabs-in-qt) –

+0

Это может быть решением, но не мешает 'x 'для отображения рядом с моим' + ', который я бы хотел избежать. –

+0

Я не понимаю ... Вам не нужно показывать кнопку закрытия одной вкладки - я даю вам решение. Пожалуйста, уточните свой вопрос. –

ответ

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

Очень умный, спасибо! –