gpt4 book ai didi

c++ - 插槽未被使用

转载 作者:行者123 更新时间:2023-11-28 00:23:14 24 4
gpt4 key购买 nike

我正在学习 Qt 中的信号/槽,我发现了一个问题。我需要创建自己的插槽,当移动或选择 QGraphicsScene(在 QGraphicsView 中)上的项目时调用该插槽。

我从一个简单的应用开始,它有一个小部件,上面有 graphicsView 和标签。我在我的窗口中创建了一个插槽并将其连接到 QGraphicsScene 的信号,但它没有被使用。我的错误在哪里?

代码如下:

//MainWindow.h
//as generated by QtCreator, just added one slot to it
...omitted for brevity...

public slots:
void selectedItemChanged(QGraphicsItem * newItem, QgraphicsItem * oldItem);

..omitted for brevity...

//------------------------------------------------------------------

//MainWindow.cpp
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
QGraphicsScene * scene = new QGraphicsScene();
scene->setBackgroundBrush (QBrush(Qt::gray));
ui->graphicsView->setScene (scene);

for(int x = 10; x < 250; x+=20)
{
QGraphicsEllipseItem * item = scene->addEllipse (x,x,5,5,QPen(Qt::darkGreen),QBrush(Qt::darkGreen));
item->setFlag (QGraphicsItem::ItemIsFocusable,true);
}

QObject::connect (scene,SIGNAL(focusItemChanged),this,SLOT(selectedItemChanged));
}

void MainWindow::selectedItemChanged (QGraphicsItem *newItem, QGraphicsItem *oldItem)
{
qDebug()<<"called";
if(newItem == 0)
{
ui->label->setText ("Není vybrán bod");
}
else
{
ui->label->setText (QString::number (newItem->scenePos ().x ()) + "," + QString::number (newItem->scenePos ().y ()));
}
}

现在,当我运行程序时它运行正常,但我无法将焦点设置在场景上绘制的圆圈(椭圆)上并且未使用插槽。我尝试设置 IsSelectable 标志,但没有帮助。 是否有任何其他首选方法来完成此操作或解决我的问题?

最佳答案

根据 documentation,您没有链接到信号的正确签名:

void QGraphicsScene::focusItemChanged( QGraphicsItem * newFocus, QGraphicsItem * oldFocus,
Qt::FocusReason reason)

同时请注意,您可以通过 QObject::connectbool 返回类型检查连接的成功/失败状态。方法

关于c++ - 插槽未被使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26420799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com