Я создаю QTabWidget, как вкладки браузера, он содержит QToolButton для добавления вкладки.
Демонстрационное изображение здесь
Я установил эту кнопку как закрытый член QToolButton *addTabButton
и инициализировал с помощью открытого метода QToolButton* addTabBtn()
.
Что я хочу
Моя идея заключается в том, чтобы позволить пользователю api выбирать с помощью кнопки newTab (вызов tabWidget.addTabBtn()
), а также настраивать собственную кнопку. Но я не хочу, чтобы пользователь api удалял ее после вызова tabWidget.addTabBtn()
class BrowserTab : public QTabWidget
{
Q_OBJECT
public:
explicit BrowserTab(QWidget *parent = nullptr);
~BrowserTab();
QToolButton* addTabBtn();
signals:
void addTabClicked(); //see addTabBtn() fun
private:
/*Child Widgets*/
QToolButton *addTabButton;
};
BrowserTab::BrowserTab(QWidget *parent):
QTabWidget (parent)
{
addTabButton = nullptr;
//initialize other things...
}
QToolButton* BrowserTab::addTabBtn()
{
/*Initial "addTabButton" and return pointer*/
if(addTabButton == nullptr)
{
addTabButton = new QToolButton(this);
addTabButton->setText("+");
addTabButton->setShortcut(QKeySequence::AddTab);
addTabButton->setAutoRaise(true);
connect(addTabButton,&QToolButton::clicked,this,&BrowserTab::addTabClicked);
setCornerWidget(addTabButton,Qt::TopRightCorner);
}
return addTabButton;
}
Проблема
Я обнаружил, что есть проблема, когда я делаю это:
tabwidget = new BrowserTab(this);
tabwidget->addTab(new QLabel("some content",tabwidget),
QString("Loooooooooooooooooong Title"));
tabwidget->addTabBtn();
/* connect signal/slot to button... */
/*Error usage*/
QToolButton *button = tabwidget->addTabBtn();
delete button;
Это причина ошибки сегментации. Есть ли способ предотвратить удаление пользователем кнопки после кнопки инициализации?
Может быть, вернуть ссылку кнопки?
PS:
Мой английский довольно ограничен, извините за неудобства.
Другая информация:
Операционная система: Win7 32bit
QT Kit: DeskTop Qt5.11.1 MinGw 32bit
Repo: https://github.com/Loukei/Demo-Test