Я использую Visual Studio с Qt.
У меня нет доступа к Qt Designer. все это делается с помощью кодирования (C ++);
У меня есть программное обеспечение с открытым исходным кодом под названием easypaint.
я застрял при попытке переименовать вкладки. Я хочу иметь возможность переименовывать вкладки, когда пользователь дважды щелкает саму вкладку.
я создал новую функцию для фильтрации события doubleClick:
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
`enter code here`{
if (event->type() == QEvent::MouseButtonDblClick) {
return true;
} else {
// standard event processing
return QObject::eventFilter(obj, event);
}
}
Затем я добавил эту строку в функцию, которая инициализирует TabWidget:
installEventFilter(mTabWidget);
Может кто-нибудь, пожалуйста, проведите меня через это.
Спасибо
Скорее всего, Qt не позволяет открытому редактору открывать имя вкладки. Поэтому вам, скорее всего, придется создать и запустить очень маленький QDialog, чтобы запросить новое имя:
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == mTabWidget &&
event->type() == QEvent::MouseButtonDblClick) {
// query and set tab(s) names
QTabWidget *tab = qobject_cast<QTabWidget *>(obj);
if(tab)
{
QDialog dlg;
QVBoxLayout la(&dlg);
QLineEdit ed;
la.addWidget(&ed);
QDialogButtonBox bb(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
la.addWidget(&bb);
dlg.setLayout(&la);
if(dlg.exec() == QDialog::Accepted)
{
tab->setTabText(0, ed.text());
return true;
}
}
}
// Standard event processing
return QObject::eventFilter(obj, event);
}
Возможно, динамическому управлению памятью в Qt не нравятся экземпляры локальных классов, поэтому вам придется преобразовать все эти экземпляры классов, созданные в указатели, созданные с помощью new
, но, пожалуйста, не забудьте сказать QDialog удалить при закрытии или вызове dlg->deleteLater()
после того, как вы запросили новое имя.
Другой способ решить эту проблему с помощью фальшивого встроенного редактора потребует немного больше работы:
Вы можете написать фильтр событий следующим образом:
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == mTabWidget &&
event->type() == QEvent::MouseButtonDblClick) {
QTabWidget *tab = qobject_cast<QTabWidget *>(obj);
// Set tab(s) names
tab->setTabText(0, "New Name");
}
// Standard event processing
return QObject::eventFilter(obj, event);
}