将小部件添加到QTabWidget中

9

我可以将一些小部件,如QLabelQPushButton添加到QTabWidget中吗?

实际上,我想要做的是这样的: enter image description here

我正在使用C++和Qt。

谢谢

2个回答

10

如果您想要做这件事,我建议您使用QTabBar而不是QTabWidget。例如,您的代码可以是这样的(请记住,这只是一个非常简单的例子):

// Here some first widget
QWidget *wid1 = new QWidget(this);
QHBoxLayout *wid1Lay = new QHBoxLayout(wid1);
wid1Lay->addWidget(new QLabel(tr("Widget1")));

// Here some second widget
QWidget *wid2 = new QWidget(this);
QHBoxLayout *wid2Lay = new QHBoxLayout(wid2);
wid2Lay->addWidget(new QLabel(tr("Widget2")));

// Here some third widget
QWidget *wid3 = new QWidget(this);
QHBoxLayout *wid3Lay = new QHBoxLayout(wid3);
wid3Lay->addWidget(new QLabel(tr("Widget3")));

// Here your Tab bar with only bars
QTabBar *bar = new QTabBar(this);
bar->addTab("One");
bar->addTab("Two");
bar->addTab("Three");

// Here some label (for example, current time) and button
QLabel *lab = new QLabel(tr("Some text"), this);
QPushButton *but = new QPushButton(tr("Push"), this);

// Main layouts
QVBoxLayout *vLay = new QVBoxLayout(ui->centralWidget);
QHBoxLayout *hLay = new QHBoxLayout();

vLay->addLayout(hLay);
hLay->addWidget(bar);
// Spacer for expanding left and right sides
hLay->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum));
hLay->addWidget(lab);
hLay->addWidget(but);

vLay->addWidget(wid1);
vLay->addWidget(wid2);
vLay->addWidget(wid3);

// Some simple connect with lambda for navigation
connect(bar, &QTabBar::currentChanged, [=] (int index) {

    wid1->setVisible(false);
    wid2->setVisible(false);
    wid3->setVisible(false);

    switch(index) {
    case 0: wid1->setVisible(true);
        break;
    case 1: wid2->setVisible(true);
        break;
    case 2: wid3->setVisible(true);
        break;
    default:{}
    }

});

emit bar->currentChanged(0);

其实,我不认为我可以用QTabBar替换它,因为我的QTabWidget已经实现了很多功能。但是,感谢您的回答,对我很有帮助。 - KelvinS
3
@someoneinthebox,你可以使用QStackedWidget来显示一个小部件而不是手动地隐藏和显示小部件。你可以直接连接到它的setCurrentIndex()槽函数。 - Mike
@Mike,哦,明白了。非常有用。 - Shtol Krakov

10

可以通过使用QTabWidget::setCornerWidget实现。

快速示例:

        QWidget* pTabCornerWidget = new QWidget(this);

        QLabel* pLabelTime = new QLabel(pTabCornerWidget);
        pLabelTime->setText("10:22:20");

        QPushButton* pButton = new QPushButton(pTabCornerWidget);
        pButton->setText("?");
        pButton->setMaximumSize(QSize(25, 25));

        QHBoxLayout* pHLayout = new QHBoxLayout(pTabCornerWidget);
        pHLayout->addWidget(pLabelTime);
        pHLayout->addWidget(pButton);

        mUI.tabWidget->setCornerWidget(pTabCornerWidget, Qt::TopRightCorner);

这正是我寻找的东西。谢谢。 - KelvinS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接