2016-12-29 4 views
0

나는 몇 가지 셰이프를 그리기 만하는 응용 프로그램을 만들려고합니다. 그러면 3 개의 QWidgetLists 중 하나에서 선택하고 단추를 클릭하면 선택한 셰이프가 빨간색으로 바뀝니다. 그리기 등은 문제가 아니지만 어떤 목록이 활성화되어 있고 항목을 선택했는지 확인할 수있는 방법을 찾을 수 없습니다. 현재 코드는 다음과 같습니다어떤 QListWidget이 항목을 선택했는지 확인하는 방법

QPixmap pixmap(ui->display_field->width(),ui->display_field->height()); 
    pixmap.fill("transparent"); 
    int chosen_one; 

    if(ui->radio_circle->isChecked()){ 
     if(circles_list.count() > 0){ 
      chosen_one = ui->circles_list_wgt->currentItem()->text().toInt(); 
      circles_list[chosen_one].setColor(Qt::red); 
      for(int i=0; i<circles_list.count(); i++) circles_list[i].draw(&pixmap); 
      circles_list[chosen_one].setColor(Qt::black); 
     } 

     for(int i=0; i<rectangles_list.count(); i++) rectangles_list[i].draw(&pixmap); 
     for(int i=0; i<triangles_list.count(); i++) triangles_list[i].draw(&pixmap); 
    } 

    if(ui->radio_rect->isChecked()){ 
     if(rectangles_list.count() > 0){ 
      chosen_one = ui->rectangles_list_wgt->currentItem()->text().toInt(); 
      rectangles_list[chosen_one].setColor(Qt::red); 
      for(int i=0; i<rectangles_list.count(); i++) rectangles_list[i].draw(&pixmap); 
      rectangles_list[chosen_one].setColor(Qt::black); 
     } 

     for(int i=0; i<circles_list.count(); i++) circles_list[i].draw(&pixmap); 
     for(int i=0; i<triangles_list.count(); i++) triangles_list[i].draw(&pixmap); 
    } 

    if(ui->radio_tri->isChecked()){ 
     if(triangles_list.count() > 0){ 
      chosen_one = ui->triangles_list_wgt->currentItem()->text().toInt(); 
      triangles_list[chosen_one].setColor(Qt::red); 
      for(int i=0; i<triangles_list.count(); i++) triangles_list[i].draw(&pixmap); 
      triangles_list[chosen_one].setColor(Qt::black); 
     } 

     for(int i=0; i<circles_list.count(); i++) circles_list[i].draw(&pixmap); 
     for(int i=0; i<rectangles_list.count(); i++) rectangles_list[i].draw(&pixmap); 
    } 

    ui->display_field->setPixmap(pixmap); 

원래 응용 프로그램은, 작업이 지금처럼 라디오 버튼에 따라 약간 다른 방법을했다. 아이템 선택에만 의존하고 싶습니다. 솔루션과

답변

0

두 가지 문제가 :

  1. 당신은 실제로 선택이있다 : 모든 QListWidget가 자신의 선택을했다, 따라서 자신의 현재 항목이 있습니다.
  2. 그림은 paintEvent으로 작성해야합니다.

나는 다음을 건의 할 것입니다 :

  • 서브 클래스 그릴 할 항목의 목록을 유지하는 QWidget.
  • 위젯의 QWidget::paintEvent 메소드를 구현하십시오. 이 메소드는 위젯을 화면에 그려야 할 때 자동으로 Qt에 의해 호출됩니다. QWidget::update으로 전화하여 수동으로 요청할 수 있습니다 (예 : 모양 선택이 변경되면
  • 도형을 Rectangle, CircleTriangle 클래스와 같이 별도의 클래스로 분류해야 할 수도 있습니다.

그런 다음 QListWidget 세 개를 포함하는 양식을 만듭니다. 단일 슬롯을 만들고 목록의 QListWidget::currentRowChanged 신호를 모두이 단일 슬롯에 연결하십시오. 따라서 목록의 다른 모양을 선택할 때마다 호출됩니다. 슬롯 내부에서 사용자가 모양을 선택한 목록에서 sender() 루틴을 사용하여 구별 할 수 있습니다. 그에 따라 도면 위젯을 업데이트하고 update으로 전화하면 작업이 완료됩니다.