2014-09-10 38 views
0

A部分:動態創建一個自定義窗口小部件的新實例和連接信號和插槽(QT)

我創建了一個名爲Panel控件我想反覆做出的新實例其中。

因此,舉例來說,它看起來是這樣的:

Panel *panelArray[10]; 
for(int i=0;i<10;i++) panelArray[i] = new Panel(this); 

這會是適當的語法?

PART B:

如果是這樣,我怎樣手動掛鉤從每個板的發射的信號?

例子:

for(int i=0;i<10,i++) connect(panelArray[i], SIGNAL(raiseToggleGUICmd(QByteArray)), this, SLOT(writeData(QByteArray))); 

提前感謝!

+1

兩個部分看起來OK。如果設計好壞取決於最終要求 – eferion 2014-09-10 15:47:19

+0

謝謝@eferion :)我會繼續前進。 – Rachael 2014-09-10 15:49:14

回答

2

A部分看起來很正常。

B部分看起來正常了,但是如果你想知道哪個窗口小部件發出的信號,你應該使用這樣的事情(在你的情況,你的插槽中做同樣的事情,與每一個部件)的QSignalMapper

用法

signalMapper = new QSignalMapper(this); 
for (int i = 0; i < 3; ++i) 
    { 
     QPushButton *button = new QPushButton(QString::number(i),this); 
     connect(button, SIGNAL(clicked()), signalMapper, SLOT(map())); 
     button->move(i*10,i*10);//doesn't matter 

     signalMapper->setMapping(button, QString::number(i)); 
    } 
connect(signalMapper, SIGNAL(mapped(const QString &)), 
      this, SLOT(clicked(const QString &))); 

//... 
void MainWindow::clicked(const QString & text) 
{ 
    QMessageBox::information(this, "TEST", text, QMessageBox::Ok); 
} 

或者使用sender()

for (int i = 0; i < 3; ++i) 
    { 
     QPushButton *button = new QPushButton(QString::number(i),this); 
     button->setObjectName(QString::number(i));//important 
     connect(button, SIGNAL(clicked()), this, SLOT(clicked())); 
     button->move(i*10,i*10); 
    } 

void MainWindow::clicked() 
{ 
    switch(sender()->objectName().toInt()) 
    { 
     case 0: 
     QMessageBox::information(this, "TEST", "0", QMessageBox::Ok);//do something specific to 0 widget 
     break; 
    case 1: 
    QMessageBox::information(this, "TEST", "1", QMessageBox::Ok);//do something specific to 1 widget 
    break; 
    case 2: 
    QMessageBox::information(this, "TEST", "2", QMessageBox::Ok);//and so on 
    break; 
    } 
} 
+0

哇。我在想這件事,並看到一些signalmapper的東西出現在我的谷歌搜索...非常感謝你這個真棒帖子!我肯定會在將來使用它,我相信!再次感謝。這太棒了。請在回答頂部添加一個小小的blerb,直接回復/回覆我的問題的組成部分,我會將其視爲「已回答」 – Rachael 2014-09-10 16:38:57

+0

@Rachael不幸的是,英語不是我的母語,我不知道什麼是這個「blerb」。對不起。請看我的編輯,是你想要的嗎? – Chernobyl 2014-09-10 17:02:36

+0

抱歉。 「Blurb」是正確的拼寫,我用它來問「請在答案頂部寫一些* *」。再次感謝。 – Rachael 2014-09-10 17:26:41