2016-12-29 41 views
0

我试图做一个应用程序只是绘制几个形状,然后如果从三个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(例如当你的形状选择已经改变。
  • 也许你甚至想将绘图分解成单独的类,如RectangleCircleTriangle类。

然后创建您的表单,其中包括三个QListWidget。创建一个插槽并将列表'QListWidget::currentRowChanged信号完全连接到此单个插槽。因此,只要您在任何列表中选择另一个形状,就会调用它。在插槽内部,您可以使用sender()例程来区分用户从哪个列表中选择一个形状。相应地更新你的绘图部件,请致电update,你就完成了。

相关问题