2016-05-08 4 views
0

Я хочу сделать что-то очень похожее на это изображение в Qt, где я могу щелкнуть по любому квадрату и изменить его цвет.Как создать сетку в Qt с цветами?

Image

+1

Вы должны посмотреть на класс QTableView. Используя это, вы можете представить предоставленное изображение. Затем каждый раз, когда сигнал щелчка выделяется в ячейке, он открывает класс QColorDialog, чтобы вы могли выбрать цвет для обновления. – SRD

+1

Существует несколько способов сделать это, в зависимости от вашего варианта использования. Насколько велика эта шкала? Если это всегда размер предоставленного изображения, «QTableView», как упоминалось выше, является хорошей ставкой. Если вы имеете дело с множеством квадратов или хотите больше взаимодействовать, чем просто менять цвета, вам могут потребоваться QGraphicsScene'/'QGraphicsView' или QML. –

ответ

0

Это довольно просто сделать это с помощью QML. Посмотрите на код ниже:

import QtQuick 2.1 
import QtQuick.Window 2.0 

Window { 
    id: root 
    visible: true 
    width: 360 
    height: 500 
    Column{ 
     Repeater{ 
      model: getRowsNumber(root.height) 
      delegate: Row{ 
       property int externalIdx: index 
       Repeater{ 
        model: getColumnsNumber(root.width) 
        delegate: Rectangle{ 
         property bool selected: false 
         property color originalColor: (index + externalIdx) % 2 == 0 ? "black" : "white" 

         width:20 
         height: 20 
         color: selected ? "red" : originalColor 
         border.width: 1 
         border.color: "black" 
         MouseArea{ 
          anchors.fill: parent 
          onClicked: parent.selected = !parent.selected 
         } 
        } 
       } 
      } 
     } 
    } 

    function getColumnsNumber(width){ 
     return width/20; 
    } 
    function getRowsNumber(height){ 
     return height/20; 
    } 
} 

Это все, что вам нужно иметь прямоугольную шахматы, как сетка, где каждая клетка меняет свой цвет при нажатии на. Конечно, вам нужно будет адаптировать его к вашим потребностям, но этого должно быть достаточно для начала.