2012-01-01 36 views
6
void MainWindow::addRadioToUI() 
{  int button_cunter=4; 
     while(!database.isEmpty()) 
     {  button_cunter++; 

       QPushButton *one = new QPushButton("Play: "+name(get_r.getTrackId())); 
       one->setIcon(QIcon(":/images/play_button.png")); 
       one->setMaximumWidth(140); 
       one->setFlat(true); 

       QGroupBox* get_rGB = new QGroupBox("somethink"); 
       QFormLayout* layout = new QFormLayout; 
       if(button_cunter%5 == 0){ 
        layout->addWidget(one); 

       } 

       get_rGB->setLayout(layout); 
       scrollAreaWidgetContents->layout()->addWidget(get_rGB); 

     } 
} 

Tôi có một vài QPushButton được thêm automaticlly. Có cách nào để thêm "thuộc tính id hoặc sth else" vào nút và tiếp theo biết nút nào đã được nhấp không? Tôi có hành động khác nhau cho mỗi nút.Qt, PushButton, thuộc tính id? Bất kỳ cách nào để biết nút nào được nhấp vào

Trả lời

5

QApplication cung cấp sender() chứa đối tượng nào gửi tín hiệu. Vì vậy, bạn có thể làm:

//slot, this could also be done in a switch 
if(button[X] == QApplication::sender()){ 
    doX(); 
}else if(button[Y] == QApplication::sender()){ 
    doY(); 
} 

http://doc.qt.io/qt-4.8/qobject.html#sender

5

QSignalMapper là khá tốt cho loại điều.

Bạn sẽ xác định khe của bạn như thế này ví dụ:

public slots: 
    void clicked(int buttonId); // or maybe trackId 

Sau đó, thêm một thành viên QSignalMapper* đến lớp học của bạn và kết nối nó với khe rằng:

signalMapper = new QSignalMapper(this); 
    connect(signalMapper, SIGNAL(mapped(int)), 
      this,   SLOT(clicked(int))); 

Trong addRadioToUI, sau khi tạo của bạn nhấn nút, làm:

signalMapper.setMapping(one, button_cunter); 
          // or trackId if that's more practical 

Nếu tất cả những gì bạn cần là một con trỏ tới đối tượng đã kích hoạt tín hiệu mặc dù, bạn có thể sử dụng hàm QOjbect::sender tĩnh trong vùng của bạn để có được một xử lý cho điều đó.

+0

Sau khi 'signalMapper' được tạo, bạn cần nó để nhận tất cả các tín hiệu mà bạn muốn nó chuyển. Bạn sẽ cần một cuộc gọi như 'connect (ui-> pushButton_1, SIGNAL (click()), signalMapper, SLOT (map()));' ngay sau khi 'signalMapper' được tạo và nó sẽ được lặp lại cho tất cả các đối tượng mà bạn muốn nó để nhận. – zar

2

Sử dụng QButtonGroup. Nó lấy id như một tham số khi một nút được thêm vào và cung cấp id cho một khe khi một nút trong nhóm được nhấn.

Các vấn đề liên quan