双击Qt选项卡时重命名
Qt Tab rename when double clicked
我正在使用Visual Studio和Qt。我无法访问Qt设计器。这一切都是通过编码完成的(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()
。
通过假内联编辑器解决此问题的另一种方法需要更多的工作:
- 创建 QLineEdit 将其
- 移动到选项卡的正上方,将其放在前面并将键盘焦点设置为它
- 有线信号和插槽
- 按回车键应使用 QLineEdit 的内容
- 从行编辑中离开焦点应被视为"中止"并删除行编辑器
- 实施槽以执行所需的操作。
您可以以休光方式编写事件过滤器:
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);
}
相关文章:
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 通过重命名C++中的符号来减小二进制大小
- 如何以与 API 兼容的方式重命名类成员?
- 如何在Visual Studio Code中重命名我的a.exe文件?
- 在Qt中复制,剪切,粘贴,重命名,撤消和重做
- 重命名 win32api 函数以进行混淆
- 将内容从第一个文件("constituencies")移动到第二个文件("temp")并在之后重命名时,我的文件被删除
- 如何在重命名函数 (c++) 中使用变量?
- 如何通过 boost::p ython 重命名构造函数的关键字参数
- 以编程方式防止重命名或删除文件,但仍使其可写
- C++:重命名dll和lib并链接
- 使用 stdio.h 重新定位和重命名文件C++
- C++ Qt5 QDir重命名返回错误
- C++提升 ptree 重命名键
- 如何检测哪些进程更改,重命名或创建文件?
- 禁用/重命名从主机环境导入"env"
- 录制后无法重命名 rosbag 文件
- 避免在统计数据和重命名之间进行TOCTOU(检查时间,使用时间)
- 双击Qt选项卡时重命名
- 在QTabBar/QTabWidget中内联重命名选项卡