使用 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 都有自己的 QMainWindow
和 QTabWidget
但 parseCSV
指针保持不变。
考虑到可能有多个 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));
}
所以我在文件中有这段代码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 都有自己的 QMainWindow
和 QTabWidget
但 parseCSV
指针保持不变。
考虑到可能有多个 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));
}