向右移动两个Qt标签,向左侧休息

时间:2016-05-13 04:45:30

标签: c++ css qt

我试图弄清楚如何将QtTabWidget中的两个标签向右移动,而将其余标签留在左侧。

标签是静态的,不会在运行时添加。

以下是我所拥有的: Here is what I have so far

这是我想要的: Here is what I want to have

我已经尝试编辑样式表并添加<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Stream Audio and Play" android:id="@+id/play" /> </LinearLayout ,但这只是使所有这些都正确,并且不适用于特定标签。我也尝试了诸如alignment:right;float之类的东西,但没有运气。

我也无法在qt docs中找到任何似乎可以帮助我的内容。

所以我的问题是:如何移动&#34; Profile&#34;选项卡和&#34;设置&#34;选项卡在右边,而剩下的就在哪里?

1 个答案:

答案 0 :(得分:5)

好吧,我认为只有一个QTabWidget你不能这样做。首先,您确定需要使用QTabBar而不是QSpacerItem吗?

无论如何,您可以在QTabBars两个 QTabBars中找到答案。

  1. 使用标签创建两个QHBoxLayout;
  2. 创建QSpacerItem;
  3. 将第一个栏添加到此布局,然后使用展开式政策添加QTabBar,然后添加最后一个栏;
  4. 当您点击任意栏时 - 您可以通过信号/插槽在屏幕上显示/隐藏您的小部件。
  5. 问题是 - 默认选择每个QTabBar上的第一个栏。它通过在每个_firstBar = new QTabBar(this); _firstBar->addTab(""); _firstBar->addTab("First tab"); _firstBar->addTab("Second tab"); _firstBar->addTab("Third tab"); _firstBar->addTab("Fourth tab"); _firstBar->setDrawBase(false); _firstBar->setStyleSheet("QTabBar::tab:first { max-width: 0px; border: 0px }"); _secondBar = new QTabBar(this); _secondBar->addTab(""); _secondBar->addTab("Fifth bar"); _secondBar->addTab("Sixth bar"); _secondBar->setDrawBase(false); _secondBar->setStyleSheet("QTabBar::tab:first { max-width: 0px; border: 0px }"); QHBoxLayout *lay = new QHBoxLayout(ui->centralWidget); lay->addWidget(_firstBar); lay->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Fixed)); lay->addWidget(_secondBar); connect(_firstBar, &QTabBar::currentChanged, this, &MainWindow::showFirstBarWidget); connect(_secondBar, &QTabBar::currentChanged, this, &MainWindow::showSecondBarWidget); _firstBar->setCurrentIndex(1); 添加空标签来解决。

    一些示例代码:

    void MainWindow::showFirstBarWidget(int index)
    {
        if(index == 0)
            return;
    
        _secondBar->setCurrentIndex(0);
    
        switch(index) {
            // Here code show/hide your QWidget by index
        }
    }
    
    void MainWindow::showSecondBarWidget(int index)
    {
        if(index == 0)
            return;
    
        _firstBar->setCurrentIndex(0);
    
        switch(index) {
            // Here code show/hide your QWidget by index
        }
    }
    

    这里是插槽:

    // create threads and send structs to recursively sort
    pthread_t thread1;
    if (pthread_create(&thread1, NULL, merge_sort, &t_arg1) != 0 || t_arg->n_threads == MAX_THREADS) {
        merge_sort(&t_arg1);
    } else {
        no. of threads++
    }
    
    merge_sort(&t_arg2);
    
    pthread_join(thread1, NULL);
    no. of threads--