QGraphicsTextItem编辑需要执行两次操作
QGraphicsTextItem editing requires an action performed twice
我想让QGraphicsTextItem
在双击时可编辑,并在点击时可移动。
#include <QApplication>
#include <QPainter>
#include <QGraphicsItem>
#include <QGraphicsView>
class TextItem: public QGraphicsTextItem
{
public:
TextItem()
{
setPlainText("hello world");
QFont f;
f.setPointSize(50);
f.setBold(true);
f.setFamily("Helvetica");
setFont(f);
setFlags(QGraphicsItem::ItemIsMovable |
QGraphicsItem::ItemIsFocusable |
QGraphicsItem::ItemIsSelectable);
setTextInteractionFlags(Qt::NoTextInteraction);
}
virtual void paint(QPainter* painter,
const QStyleOptionGraphicsItem* option,
QWidget* widget = NULL)
{
QGraphicsTextItem::paint(painter, option, widget);
}
protected:
virtual void focusOutEvent (QFocusEvent * event)
{
Q_UNUSED(event);
setTextInteractionFlags(Qt::NoTextInteraction);
}
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent * event)
{
Q_UNUSED(event);
setTextInteractionFlags(Qt::TextEditable); // TextEditorInteraction
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
TextItem* t = new TextItem();
QGraphicsView view(new QGraphicsScene(-200, -150, 400, 300) );
view.scene()->addItem(t);
view.show();
return a.exec();
}
它做我想做的事-除了我必须双击两次
-第一次双击时,我看到一个光标,但无法编辑文本(使用选项TextEditable
或TextEditorInteraction
(我可能想要后者)。然后我再次双击,我可以键入添加或删除文本。
这是一个用户可能没有预料到的行为,而且我所做的一切似乎都无法改变它
我是做错了什么,还是有什么需要补充的?
我希望鼠标对可聚焦项目进行操作,使其自动聚焦。我想不是。。。
在mouseDoubleClickEvent
中,我添加了对setFocus()
的调用
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent * event)
{
Q_UNUSED(event);
setTextInteractionFlags(Qt::TextEditorInteraction);
setFocus();
}
相关文章:
- g++的分段错误(在NaN上使用to_string两次时)
- 蛇在C++不会连续转两次
- 检查一个数组是否包含在另一个数组中,以相反的顺序,至少两次
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 我应该如何去缓解两次出现的cin?
- Realloc 两次无法在 Visual Studio 上运行
- 使用 getline(cin, var) 两次在进行字符串比较时会产生错误 (==)
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- C++析构函数调用两次,堆栈分配的复合对象
- 为什么参数在构造 std::thread 时移动两次
- Qt插槽调用了两次
- 做 std::用相同的unique_ptr移动两次
- C++两次定义相同的函数会导致错误
- 为什么具有静态存储持续时间的同一内联变量在包含在 VS2017 编译的两个翻译单元中时会构造和销毁两次
- 每个操作执行两次
- Qt - 解决一个插槽上的两个顺序调用,并且仅执行一次操作
- 在N秒内两次提升asio deadline_timer async_wait(N秒)导致操作取消
- 为什么ctime clock()在同一个程序对同一个操作调用两次时给出不同的时间?
- QGraphicsTextItem编辑需要执行两次操作
- 为什么在执行vector.push_back操作时要调用两次复制构造函数