2016-06-06 17 views
4

Kann ich hinzufügen, einige Widgets wie QLabel und QPushButton in eine QTabWidget?Widgets in eine QTabWidget

Eigentlich möchte ich so etwas wie dies zu tun: enter image description here

I C bin mit ++ und Qt.

Dank

Antwort

2

Es ist möglich, nur QTabWidget::setCornerWidget zu verwenden.

Schnell Beispiel:

 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); 
+0

Genau das habe ich gesucht. Vielen Dank. – KelvinS

5

Wenn Sie diese Sachen tun wollen, empfehle ich Ihnen QTabBar anstelle von QTabWidget. Zum Beispiel kann der Code sein (denken Sie daran, dass es nur ein sehr einfaches Beispiel):

// 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); 
+0

Eigentlich, ich glaube nicht, dass ich es für eine QTabBar austauschen kann, weil mein QTabWidget bereits (mit vielen Funktionen) implementiert ist, aber danke für deine Antwort, es war sehr hilfreich. – KelvinS

+3

@someoneinthebox, können Sie ein ['QStackedWidget'] (http://doc.qt.io/qt-5/qstackedwidget.html) verwenden, um ein Widget pro Zeit zu zeigen, anstatt die Widgets selbst zu verstecken und anzuzeigen. Sie können sich einfach direkt mit dem [setCurrentIndex() '] (http://doc.qt.io/qt-5/qstackedwidget.html#currentIndex-prop) Slot verbinden. – Mike

+0

@Mike, oh, hab es. Sehr nützlich. – someoneinthebox