P: Czy mogę połączyć sygnały / gniazda do siebie w konstruktorze?

EDYCJA: Nie dotyczy sygnałów / gniazd / połącz. Problemem był konstruktor wywołujący konstruktor.

Może być lepszy sposób na zrobienie tego - byłbym zainteresowany wysłuchaniem tych ...

Mam MyClass, który pochodzi z QLabel. Chcę przekazać więcej danych o klasie pochodnej z powrotem do sygnału niż to, co robi sygnał bazowy. Zrobiłem więc gniazdo do przechwytywania sygnału customContextMenuRequested i emitowania poprawionego sygnału, który ma więcej danych.

Kiedy próbuję połączyć ten sygnał w konstruktorze, mój slot nigdy nie zostanie wywołany. Ale jeśli przeniosę Politykę i połączę linie z widżetem nadrzędnym (nie nadrzędnym hierarchii klas), to wykonają się po tym, jak MyClass jest w pełni skonstruowany, wtedy moje gniazdo zostanie wywołane. Ale zawsze chcę, żeby była ona połączona z tą klasą i wydaje mi się, że chciałbym coś w jej konstruktorze, zamiast liczyć na to, że klasa nadrzędna to zapamięta.

Czy jest coś, co robię źle? Lub lepszy sposób dodawania danych do sygnału?

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);
}

Chciałbym więc, aby widżet nadrzędny po prostu szukał customContextMenuRequestedForCell, ale teraz widget nadrzędny wydaje się również być odpowiedzialny za customContextMenuRequested.

questionAnswers(2)

yourAnswerToTheQuestion