마우스 바로 아래의 QGraphicsView에 위젯을 올바르게 놓는 방법은 무엇입니까?

에마누엘레

내 이전 게시물을 따라 나는 withing에 위치 결정 문제를 해결하기 위해 노력 해왔다 QGraphicsView.

위젯을에서 끌어서 QListWidget내부에 놓으면 QGraphicsView모든 곳으로 이동합니다.

레

문제는 내가 다른 사용자도 도움으로 해결하기 위해 노력 해왔다은 다음과 같다 : 위젯은 내부에 드래그 즉시로 QGraphicsView하고 떨어졌다. 그것은 단지 임의의 위치에 가서 그것을 회수하기 위해주의를 기울여야합니다. 이 동작은 사용자에게 친숙하지 않으며 때로는 위젯을 찾는 데 약간의 시간이 걸립니다.

코드 아래 :

scene.h

#ifndef SCENE_H
#define SCENE_H

#include <QGraphicsScene>

class Scene : public QGraphicsScene
{
public:
    Scene(QObject *parent = nullptr);

protected:
  void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
  void dragMoveEvent(QGraphicsSceneDragDropEvent *event);
  void dropEvent(QGraphicsSceneDragDropEvent *event);
};

#endif // SCENE_H

scene.cpp

void Scene::dropEvent(QGraphicsSceneDragDropEvent *event)
{
    QByteArray encoded =
            event->mimeData()->data("application/x-qabstractitemmodeldatalist");
    QDataStream stream(&encoded, QIODevice::ReadOnly);

    QStringList rosTables;
    QString newString;

    while (!stream.atEnd()) {
        int row, col;
        QMap<int, QVariant> roleDataMap;
        stream >> row >> col >> roleDataMap;
        rosTables << roleDataMap[Qt::DisplayRole].toString();
    }

    for (const QString &tableType : rosTables) {
        if (tableType == "Images") {
            QPoint initPos(0, 0);
            auto *wgt = new CustomTableWidget;
            auto *proxyControl = addRect(0, 0, 0, 0, QPen(Qt::black),
                                         QBrush(Qt::darkGreen));
            auto *sizeGrip = new QSizeGrip(wgt);
            auto *layout = new QHBoxLayout(wgt);

            layout->setContentsMargins(0, 0, 0, 0);
            layout->addWidget(sizeGrip, 0, Qt::AlignRight | Qt::AlignBottom);

            connect(wgt, &CustomTableWidget::sizeChanged, [wgt, proxyControl](){
                proxyControl->setRect(wgt->geometry().adjusted(-10, -10, 10, 10));
            });

            wgt->setColumnCount(2);
            wgt->setRowCount(2);

            for (int ridx = 0; ridx < wgt->rowCount(); ridx++) {
                for (int cidx = 0; cidx < wgt->columnCount(); cidx++) {
                    auto *item = new QTableWidgetItem();

                    item->setText(QString("%1").arg(ridx));
                    wgt->setItem(ridx,cidx,item);
                }
            }

            auto *const proxy = addWidget(wgt);


            proxy->setPos(initPos.x(), initPos.y()
                          + proxyControl->rect().height());
            proxy->setParentItem(proxyControl);

            proxyControl->setPos(initPos.x(), initPos.y());
            proxyControl->setFlag(QGraphicsItem::ItemIsMovable, true);
            proxyControl->setFlag(QGraphicsItem::ItemIsSelectable, true);
            proxyControl->setRect(wgt->geometry().adjusted(-10, -10, 10, 10));
        }
    }
}

문제를 해결하기 위해 지금까지 시도한 것 :

이제 QGraphicsScene마우스 이벤트를 다시 작성하도록 하위 클래스가 지정되었습니다. 특히이 경우 dropEvent(QGraphicsSceneDragDropEvent *event)"위젯보기"를 담당하는 기능인에 주의를 기울였습니다.

여러 번의 시행 착오가 있었으며 동일한 기능에 다음 부분을 추가하려고 시도했습니다.

for (const QString &tableType : rosTables) {
    if (tableType == "Images") {
        QPoint initPos(event->scenePos()); // <-- Tried this but no change 
        auto *wgt = new CustomTableWidget;
        auto *proxyControl = addRect(0, 0, 0, 0, QPen(Qt::black),
                                     QBrush(Qt::darkGreen));
        auto *sizeGrip = new QSizeGrip(wgt);
        auto *layout = new QHBoxLayout(wgt);
}

시도 추가 것은 제공했다 문제 중 하나가 해결되지 않는,하지만 불행히도 목표에 대한 적절한하다고 판단 :QPointevent->scenePos().toPoint()

for (const QString &tableType : rosTables) {
    if (tableType == "Images") {
        QPoint initPos(event->scenePos().toPoint()); // <-- Tried this too but no change
        auto *wgt = new CustomTableWidget;
        auto *proxyControl = addRect(0, 0, 0, 0, QPen(Qt::black),
                                     QBrush(Qt::darkGreen));
        auto *sizeGrip = new QSizeGrip(wgt);
        auto *layout = new QHBoxLayout(wgt);
} 

문제가 무엇인지 아는 사람이 있으면 해결 방법에 대한 지침을 제공하십시오.

Scopchanov
  1. 변경 proxy->setPos(initPos.x(), initPos.y() + proxyControl->rect().height());proxy->setPos(10, 10);.

  2. 장면 직사각형 설정 :

     Scene::Scene(QObject *parent) :
         QGraphicsScene(parent)
     {
         setBackgroundBrush(Qt::lightGray);
         setSceneRect(0, 0, 1000, 1000);
     }
    
  3. 예를 들어 MainWindow.cpp 에서보기 정렬을 설정합니다 .

     ui->graphicsView->setAlignment(Qt::AlignLeft | Qt::AlignTop);
    

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

스핀 상자 (또는 다른 Tkinter 위젯)의 값을 계산에 올바르게 사용할 수있는 방법은 무엇입니까?

분류에서Dev

PHP의 클래스 내에서 배열을 올바르게 구성하는 방법은 무엇입니까?

분류에서Dev

마우스 호버링을 위해 Microsoft Edge에서 3D 용 CSS를 올바르게 원근법으로 처리하는 방법은 무엇입니까?

분류에서Dev

Eclipse의 클래스 경로에 폴더를 올바르게 추가하는 방법은 무엇입니까?

분류에서Dev

tkinker에서 .pack을 사용하여 위젯을 올바르게 배치하는 방법은 무엇입니까?

분류에서Dev

Flutter에서 위젯의 이벤트 핸들러 함수에 값을 올바르게 전달하는 방법은 무엇입니까?

분류에서Dev

반환 된 JSON을 C # 클래스로 올바르게 변환하는 방법은 무엇입니까?

분류에서Dev

JavaScript에서 하위 클래스를 올바르게 하위 클래스로 만드는 방법은 무엇입니까?

분류에서Dev

Google지도 URL 스키마 콜백에 값을 올바르게 전달하는 방법은 무엇입니까?

분류에서Dev

제네릭을 올바르게 하위 클래스 화하는 방법은 무엇입니까?

분류에서Dev

뒤집힌 div에서 마우스 오버를 올바르게 처리하는 방법은 무엇입니까?

분류에서Dev

마우스 오른쪽 클릭을 올바르게 감지하는 방법은 무엇입니까?

분류에서Dev

이 클래스의 가시성을 올바르게 구성하는 방법은 무엇입니까?

분류에서Dev

Javascript, 텍스트에서 패턴을 올바르게 찾고 바꾸는 방법은 무엇입니까?

분류에서Dev

Datagrid의 SelectedItem을 읽기 전용 목록에 올바르게 바인딩하는 방법은 무엇입니까?

분류에서Dev

드래그 앤 드롭으로 마우스 아래 QLayout에서 위젯을 얻는 방법은 무엇입니까?

분류에서Dev

QStyledItemDelegate의 하위 클래스가 PySide / PyQt의 QListView에서 마우스를 가리키면 올바르게 반응하도록 만드는 방법은 무엇입니까?

분류에서Dev

다른 앱 (Windows)에서 마우스 이벤트를 올바르게 재정의하는 방법은 무엇입니까?

분류에서Dev

이 3 x 3 그리드 아이콘 및 텍스트 스택을 올바른 여백으로 올바르게 만드는 방법은 무엇입니까?

분류에서Dev

특정 클래스가있는 div의 모든 이미지에 CSS 스타일을 올바르게 적용하는 방법은 무엇입니까?

분류에서Dev

Gnu / Linux의 GUI (및 CLI)에서 루트로 시스템 파일을 올바르게 편집하는 방법은 무엇입니까?

분류에서Dev

csv 파일의 실제 관측 수로 스택 막대 그림에 올바르게 주석을다는 방법은 무엇입니까?

분류에서Dev

Flutter에서 스크롤바 위젯의 색상을 변경하는 방법은 무엇입니까?

분류에서Dev

이 경우 자동 레이아웃을 올바르게 사용하는 방법은 무엇입니까?

분류에서Dev

제 경우에 라우팅 테이블을 올바르게 사용하는 방법은 무엇입니까?

분류에서Dev

C에서 C ++ 클래스 사용 : 일종의 "삭제 / 삭제"기능을 올바르게 작성하는 방법은 무엇입니까?

분류에서Dev

Javascript-양식의 입력을 DOM에 올바르게 추가하는 방법은 무엇입니까?

분류에서Dev

__getattr__을 올바르게 선택할 수있는 클래스를 만드는 방법은 무엇입니까?

분류에서Dev

$ injector의 사용법을 올바르게 테스트하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    스핀 상자 (또는 다른 Tkinter 위젯)의 값을 계산에 올바르게 사용할 수있는 방법은 무엇입니까?

  2. 2

    PHP의 클래스 내에서 배열을 올바르게 구성하는 방법은 무엇입니까?

  3. 3

    마우스 호버링을 위해 Microsoft Edge에서 3D 용 CSS를 올바르게 원근법으로 처리하는 방법은 무엇입니까?

  4. 4

    Eclipse의 클래스 경로에 폴더를 올바르게 추가하는 방법은 무엇입니까?

  5. 5

    tkinker에서 .pack을 사용하여 위젯을 올바르게 배치하는 방법은 무엇입니까?

  6. 6

    Flutter에서 위젯의 이벤트 핸들러 함수에 값을 올바르게 전달하는 방법은 무엇입니까?

  7. 7

    반환 된 JSON을 C # 클래스로 올바르게 변환하는 방법은 무엇입니까?

  8. 8

    JavaScript에서 하위 클래스를 올바르게 하위 클래스로 만드는 방법은 무엇입니까?

  9. 9

    Google지도 URL 스키마 콜백에 값을 올바르게 전달하는 방법은 무엇입니까?

  10. 10

    제네릭을 올바르게 하위 클래스 화하는 방법은 무엇입니까?

  11. 11

    뒤집힌 div에서 마우스 오버를 올바르게 처리하는 방법은 무엇입니까?

  12. 12

    마우스 오른쪽 클릭을 올바르게 감지하는 방법은 무엇입니까?

  13. 13

    이 클래스의 가시성을 올바르게 구성하는 방법은 무엇입니까?

  14. 14

    Javascript, 텍스트에서 패턴을 올바르게 찾고 바꾸는 방법은 무엇입니까?

  15. 15

    Datagrid의 SelectedItem을 읽기 전용 목록에 올바르게 바인딩하는 방법은 무엇입니까?

  16. 16

    드래그 앤 드롭으로 마우스 아래 QLayout에서 위젯을 얻는 방법은 무엇입니까?

  17. 17

    QStyledItemDelegate의 하위 클래스가 PySide / PyQt의 QListView에서 마우스를 가리키면 올바르게 반응하도록 만드는 방법은 무엇입니까?

  18. 18

    다른 앱 (Windows)에서 마우스 이벤트를 올바르게 재정의하는 방법은 무엇입니까?

  19. 19

    이 3 x 3 그리드 아이콘 및 텍스트 스택을 올바른 여백으로 올바르게 만드는 방법은 무엇입니까?

  20. 20

    특정 클래스가있는 div의 모든 이미지에 CSS 스타일을 올바르게 적용하는 방법은 무엇입니까?

  21. 21

    Gnu / Linux의 GUI (및 CLI)에서 루트로 시스템 파일을 올바르게 편집하는 방법은 무엇입니까?

  22. 22

    csv 파일의 실제 관측 수로 스택 막대 그림에 올바르게 주석을다는 방법은 무엇입니까?

  23. 23

    Flutter에서 스크롤바 위젯의 색상을 변경하는 방법은 무엇입니까?

  24. 24

    이 경우 자동 레이아웃을 올바르게 사용하는 방법은 무엇입니까?

  25. 25

    제 경우에 라우팅 테이블을 올바르게 사용하는 방법은 무엇입니까?

  26. 26

    C에서 C ++ 클래스 사용 : 일종의 "삭제 / 삭제"기능을 올바르게 작성하는 방법은 무엇입니까?

  27. 27

    Javascript-양식의 입력을 DOM에 올바르게 추가하는 방법은 무엇입니까?

  28. 28

    __getattr__을 올바르게 선택할 수있는 클래스를 만드는 방법은 무엇입니까?

  29. 29

    $ injector의 사용법을 올바르게 테스트하는 방법은 무엇입니까?

뜨겁다태그

보관