作者legnaleurc (CA)
看板C_and_CPP
標題Re: [問題] QT 請問object之間的連接??
時間Thu Jun 16 00:46:12 2011
※ 引述《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