Qt - QStackedWidget и QTabsExample - PullRequest
0 голосов
/ 18 ноября 2010

По сути, у меня есть несколько виджетов, между которыми я пытаюсь переключиться ... и по умолчанию используется QTabWidget.Помимо некоторой модификации, два примера (QStackedWidget и QTabsExapmle) просто смешались.Я не могу заставить работать часть "connect" (выдается ошибка: нет соответствующей функции для вызова QTabsExample :: connect), и на экране ничего не отображается, если только stackedWidget->addWidget(tabWidget) не является первым в списке (и даже тогда ясм. только представление в верхнем левом углу)*

What I see when I run the app

1 Ответ

0 голосов
/ 18 ноября 2010

Ну, для начала вам нужно раскомментировать //QTabsExample w; в main.cpp, но я думаю, это просто реликт от экспериментов ...

Кроме того, что вы подразумеваете под "ничего не отображается на экране"? *

Вы имеете в виду, что всплывает пустое окно? Или окно вообще не открывается? Или экран становится черным?

Вы исключили возможность повреждения файла app.css?

Вы пытались удалить файлы Makefiles и moc_ *?

EDIT: Я попытался упростить конструктор QTabsExample

#include <QtGui>
#include <QApplication>
#include "QTabsExample.h"

QTabsExample::QTabsExample(QWidget *parent) : QMainWindow(parent) {

    setContextMenuPolicy(Qt::NoContextMenu);
    this->setWindowTitle("Main Window, I think");

    //create tab widget
    QTabWidget *tabWidget = new QTabWidget();
    tabWidget->setContextMenuPolicy(Qt::NoContextMenu);

    //QObject::connect(tabWidget, SIGNAL(currentChanged(int)),this, SLOT(activeTabChanged(int))); // I have no experience with mobile developement
    // can you manipulate the menubar on a mobile device?

    QMyWidget* widget1 = new QLabel(tr("Widget1")); // simplification
    tabWidget->addTab(widget1, "Tab1");
    QMyWidget2* widget2 = new QLabel(tr("Widget2"));
    tabWidget->addTab(widget2, "Tab2");
    QMyWidget3* widget3 = new QLabel(tr("Widget3"));
    tabWidget->addTab(widget3, "Tab3");

    //set programatically
    tabWidget->setStyleSheet("QTabBar::tab { height: 70px; width: 80px; font-size: 15px;}");

    //create other widgets
    QWidget* customWidget1 = new QLabel(tr("Hello1")); // simplification
    QWidget* customWidget2 = new QLabel(tr("Hello2"));
    QWidget* customWidget3 = new QLabel(tr("Hello3"));

    // create stacked layout (closer to where it is actually used)
    QStackedLayout *stackedLayout = new QStackedLayout;

    //add widgets to stack
    stackedLayout->addWidget(tabWidget);
    stackedLayout->addWidget(customWidget1);
    stackedLayout->addWidget(customWidget2);
    stackedLayout->addWidget(customWidget3);

    QComboBox *pageComboBox = new QComboBox;
    pageComboBox->addItem(tr("Tab Page"));
    pageComboBox->addItem(tr("page 2"));
    pageComboBox->addItem(tr("page 3"));
    pageComboBox->addItem(tr("page 4"));
    connect(pageComboBox, SIGNAL(activated(int))), stackedLayout, SLOT(setCurrentIndex(int));

    QVBoxLayout *_layout = new QVBoxLayout;

    _layout->addWidget(pageComboBox);
    _layout->addLayout(stackedLayout);
    setLayout(_layout);

    //setCentralWidget(tabWidget);

#ifdef Q_OS_SYMBIAN
    QWidgetList widgets = QApplication::allWidgets();
    QWidget* w = 0;
    foreach(w,widgets) {
            w->setContextMenuPolicy(Qt::NoContextMenu);
    }
#endif    
}

Ожидаемое поведение:

  • поле со списком сверху с вариантами выбора: «Tab Page», «page 2», ...
  • под QTabWidget с вкладками: "Tab1", "Tab2", "Tab3"
  • Tab1 должен отображаться с QLabel, который говорит "Widget1"
  • когда вы выбираете другую вкладку, на ярлыке должно быть написано "WidgetX" // в зависимости от вашего выбора
  • когда вы выбираете другой виджет из поля со списком, вы должны увидеть «HelloX» // в зависимости от вашего выбора
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...