看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《jijuan (肝只有一個)》之銘言: : 小弟目前是QT的初學者,看了網路上的教學,裡面提到object之間的連接,下面是一個 : 小程式,我將 min和 max兩個按鈕和 label做連接,希望當兩個按鈕被按下時, label : 能夠顯示出不同的訊息,但是為什麼按鈕按下時 label都沒改變呢?? : connect(min, SIGNAL(clicked()), label, SLOT(setText("min"))); : connect(max, SIGNAL(clicked()), label, SLOT(setText("max"))); : 是 connect的部分有什麼錯誤嗎?還是說遺漏其它部份呢? 用法有誤, 你不能把 "min" 或 "max" 之類的參數放進去 另外 SIGNAL 和 SLOT 的參數個數和型態要一樣 : ============================================================================= : 附上程式碼 : #include <QApplication> : #include <QFont> : #include <QPushButton> : #include <QVBoxLayout> : #include <QWidget> : #include <QLabel> // 這個 class 最好分開到另一個 header : class MyWidget : public QWidget : { Q_OBJECT : public: : MyWidget(QWidget *parent = 0); public slots: void onMinClicked_(); void onMaxClicked_(); : }; void MyWidget::onMinClicked_() { this->min->setText( "min" ); } void MyWidget::onMaxClicked_() { this->max->setText( "max" ); } : MyWidget::MyWidget(QWidget *parent) : QWidget(parent) : { : QPushButton *quit = new QPushButton(tr("Quit")); : quit->setFont(QFont("Times", 18, QFont::Bold)); : QPushButton *min = new QPushButton(tr("Min")); : min->setFont(QFont("Times", 18, QFont::Bold)); : QPushButton *max = new QPushButton(tr("Max")); : max->setFont(QFont("Times", 18, QFont::Bold)); : QLabel *label = new QLabel(tr("Lb1")); : label->setFont(QFont("Times", 18, QFont::Bold)); : label->setText("L"); : connect(quit, SIGNAL(clicked()), qApp, SLOT(quit())); : connect(min, SIGNAL(clicked()), label, SLOT(setText("min"))); // 上面這行改成 this->connect( min, SIGNAL(clicked()), SLOT(onMinClicked_()) ); : connect(max, SIGNAL(clicked()), label, SLOT(setText("max"))); // 上面這行改成 this->connect( max, SIGNAL(clicked()), SLOT(onMaxClicked_()) ); : QVBoxLayout *layout = new QVBoxLayout; : layout->addWidget(quit); : layout->addWidget(min); : layout->addWidget(max); : layout->addWidget(label); : setLayout(layout); : } : int main(int argc, char *argv[]) : { : QApplication app(argc, argv); : MyWidget widget; : widget.show(); : return app.exec(); : } 更進階的用法參考 QSignalMapper 或是 boost.signals -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.96.113.130
rayway30419:哈 我之前也犯這個錯誤 signal跟slot之間要給一樣型態 06/16 13:22
rayway30419:把平常寫函式的習慣寫slot fuction就悲劇摟QQ 推這篇 06/16 13:22