使用QTabWidget在运行时将内容加载到选项卡中

时间:2015-05-25 12:56:04

标签: c++ qt qtabwidget

所以我将此代码放在文件AnalysisDisplays.cpp

void AnalysisDisplays::showAnalysisDisplays(QWidget *parent) {

    QMainWindow *mw = new QMainWindow(parent);

    mw->setWindowTitle("Equity Strategy Analysis");
    mw->setMinimumSize(750, 700);

    QTabWidget *tabw = new QTabWidget(mw);
    mw->setCentralWidget(tabw);

    for (QListWidgetItem *wi: listItems) {
        if (wi->checkState()) {
            std::string eqType = wi->text().toStdString();

            DisplayAnalysis *dw = new DisplayAnalysis();

            displays[currentDisplayId] = dw;

            //Add this tab to tab widget
            tabw->addTab(dw, eqType.c_str());

            dw->setDisplayId(currentDisplayId);
            currentDisplayId++;

            //dw->displayAnalysis(parseCSV->getDataForEquityType(eqType));
        }
    }

    //Show the main window
    mw->show();
}

问题是我们可能会创建很多超级慢的标签。注释掉的行是我想在运行时运行的。问题是我正在制作一个QMainWindow和一个QTabWidget而忘记了它。我需要以某种方式将事件挂钩到QTabWidget,因此每当单击选项卡对象(DisplayAnalysis)dw时,它将调用dw->displayAnalysis(parseCSV->getDataForEquityType(eqType));,其中eqType是选项卡的标题。这将导致填充选项卡内容。

可以打开多个打开showAnalysisDisplays的窗口,它们可能包含不同数量的标签。因此,每个窗口都有自己的QMainWindowQTabWidget,但parseCSV指针保持不变。

那么如何将事件挂钩到这样的每个选项卡,考虑到可能有多个窗口打开,需要在单击选项卡时在运行时加载内容?

1 个答案:

答案 0 :(得分:2)

使用信号/广告位将QTabWidget::currentChanged连接到自定义广告位,然后使用QTabWidget::tabText获取标签和标签标题,例如:

void AnalysisDisplays::currentChangedSlot(int index) {
    std::string eqType = tabw->tabText(index).toStdString();
    DisplayAnalysis *dw = qobject_cast<DisplayAnalysis*>(tabw->widget(index)));

    dw->displayAnalysis(parseCSV->getDataForEquityType(eqType));
}