編集: 信号/スロット/接続とは関係ありません。問題は、コンストラクターを呼び出すコンストラクターでした。
これを行うためのより良い方法があるかもしれません-私はそれらを聞くことに興味があります...
QLabel から派生した MyClass があります。派生クラスに関するデータを、ベース シグナルよりも多くのデータをシグナルに戻したいと考えています。そこで、customContextMenuRequested シグナルをインターセプトし、より多くのデータを含む改訂版を発行するスロットを作成しました。
コンストラクターでこのシグナルを接続しようとすると、スロットが呼び出されません。しかし、ポリシーを移動し、行を親ウィジェット (クラス階層の親ではない) に接続して、MyClass が完全に構築された後に実行されるようにすると、私のスロットが呼び出されます。しかし、私は常にそれがこのクラスに接続されることを望んでおり、親クラスがそれを行うことを覚えていることを期待するのではなく、コンストラクターで望んでいるように思えます。
私が間違っていることはありますか?または、信号にデータを追加するより良い方法はありますか?
MyClass::MyClass() : QLabel()
{
QFont currFont = font();
currFont.setPointSize(15);
setFont(currFont);
setBackgroundRole(QPalette::Mid);
std::cout << "connecting customContextMenuRequested" << std::endl;
/** PROBLEM START */
setContextMenuPolicy(Qt::CustomContextMenu);
// Is there anything wrong with connecting from "this" to "this" in a constructor?
QObject::connect(this, SIGNAL(customContextMenuRequested(const QPoint&)),
this, SLOT(addCellDataToMenuContextRequest(const QPoint&)));
/* PROBLEM END **/
}
MyClass::MyClass(QString &cellString, int row, int col)
: QLabel(cellString)
{
MyClass();
setRow(row);
setCol(col);
}
// This one is a slot
void MyClass::addCellDataToMenuContextRequest(const QPoint& pos)
{
// This doesn't get printed if I connect in my constructor,
// but it does print if I do the same connect from a parent widget.
std::cout << "called addCellDataToMenuContextRequest" << std::endl;
emit customContextMenuRequestedForCell(pos, _row, _col);
}
したがって、親ウィジェットに customContextMenuRequestedForCell を探すだけにしてもらいたいのですが、現在、親ウィジェットは customContextMenuRequested も担当する必要があるようです。