0
我需要一個可點擊的QLabel,所以我創建了一個名爲「clickablelabel」的類,它是一個具有mouseReleaseEvent的QLabel。一旦被調用,它會發出「點擊(cid)」。 「cid」是clickablelabel中的一個公共變量,由clickablelabel設置。試圖將另一個類的信號連接到主類中的插槽
當 「點擊」 是發出我想改變我的主窗口中的UI,所以我這樣做:
clickablelabel.h
signals:
void clicked(int id);
clickablelabel.cpp
void clickableLabel::mouseReleaseEvent (QMouseEvent * event)
{
emit clicked(cid);
}
mainwindow.h
private slots:
void test(int id);
mainwindow.cpp
void MainWindow::test(int id){
qDebug() << id;
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
connect(clickableLabel, SIGNAL(clicked(int)), this, SLOT(test(int)));
ui->setupUi(this);
}
這是我得到的錯誤,當我嘗試運行程序:
"expected primary-expression before ',' token
connect(clickableLabel, SIGNAL(clicked(int)), this, SLOT(test(int)));
^"
由於主窗口是創建'連接類()'函數和擁有插槽不需要使MainWindow :: test成爲公共插槽。你可以給我發送一個示例代碼來創建實例並將指向該對象的指針傳遞給connect函數嗎?我試過'clickableLabel * clkLabel; clkLabel = new clickableLabel(5,this); '這使得代碼可編譯,但MainWindow :: test'在信號發出時不被調用。 – angeloid
確保在'clickableLabel'定義中有'Q_OBJECT'宏。是否調用了'clickableLabel :: mouseReleaseEvent'?也嘗試運行QMake並重建您的項目。 – Carlton
clickablelabel.h中的'#define Q_OBJECT' - 是否正確?調用'mouseReleaseEvent'。當我嘗試使用clickableLabel類中的connect()來調用那個插槽時,它也可以工作。我已經嘗試過你的代碼,但它說_'nullptr'沒有在這個範圍內聲明。 – angeloid