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

Load content into tab at runtime on click using 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,因此只要单击选项卡 object (DisplayAnalysis) dw,它就会调用 dw->displayAnalysis(parseCSV->getDataForEquityType(eqType));,其中 eqType 是选项卡的标题。这将导致选项卡内容被填充。

可以有多个 windows 打开那个调用 showAnalysisDisplays,它们可能包含不同数量的标签。所以每个 window 都有自己的 QMainWindowQTabWidgetparseCSV 指针保持不变。

考虑到可能有多个 windows 打开需要在单击选项卡时 运行 时间加载内容,我如何才能像这样将事件挂接到每个选项卡?

使用 signals/slots 将 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));
}