所以我将此代码放在文件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
的窗口,它们可能包含不同数量的标签。因此,每个窗口都有自己的QMainWindow
和QTabWidget
,但parseCSV
指针保持不变。
那么如何将事件挂钩到这样的每个选项卡,考虑到可能有多个窗口打开,需要在单击选项卡时在运行时加载内容?
答案 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));
}