タブウィジェットの作り方

タブウィジェットとは複数の気r替えできるタブを持つウィジェットで1つ1つのタブの中に好きなウィジェットを配置できます。

タブウィジェットを作るにはQTabWidgetを使います。たとえば1つのタブの中に1つのエディットテキストを持つようなタブウジェットを作りたければ次のようなコードを書きます。

#include "mainwindow.h"
#include <QApplication>
#incluse <QTabWidget>
#include <QTextEdit>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QTabWidget tabWidget;
    QTextEdit editor1 = new QTextEdit(tr("1つめのタブ"), &tabWidget);
    QTextEdit editor2 = new QTextEdit(tr("2つめのタブ"), &tabWidget);
    tabWidget.addTab(editor1, tr("TAB1"));
    tabWidget.addTab(editor2, tr("TAB2"));
    tabWidget.setTabClosable(true);

    return app.exec();
}

addTab関数でテキストエディットなどのウィジェットを配置でき、setTabClosable関数をにtrueを渡すことでタブに×ボタンが自動でつきます。

実際にこのコードを動かして表示されたタブウィジェットが次の画像です。

表示されたタブウィジェット

このようにQTabWidgetを使うととても簡単にタブが作れます。

タブの閉じ方

タブを作るのは簡単ですが、1つ問題があります。

それはタブの「×」ボタンはそれだけではタブを閉じる機能がついていないことです。

そこでシグナルとスロットを使ってタブを閉じる動作を追加します。

例えば次のようにQMainWindowにQTabWidgetを設置した場合、タブの「×」ボタンが押されたらtabCloseRequested関数が呼ばれるのでそれを受けとってタブを閉じます。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    tabWidget = new QTabWidget(this);
    QTextEdit editor1 = new QTextEdit(tr("1つめのタブ"), &tabWidget);
    tabWidget->addTab(editor1, tr("TAB1"));
    connect(tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int)));
}

/**「×」ボタンが押されたタブを閉じる*/
MainWindow::closeTab(int index)
{
	tabWidget->removeTab(index);
}

この例のようにcloseTabなどの適当なスロット関数として作り、その中で「×」ボタンがクリックされたタブをremoveTab関数で閉じるだけです。

関連項目
プライバシーポリシー