0

QWidget である QMainWindow の中央ウィジェットにサブクラス化された QWidgets(QTextEdit を 1 つだけ含む)を動的に生成する「ドラッグ アンド ドロップ ボタン」として機能する、サブクラス化された QToolButton(addToolBar() で mainwindow に追加されたツールバー内)があります。ドラッグアンドドロップは正常に機能します。

ただし、ユーザーが非常に特定の順序でそれらにアクセスしない限り、QTextEdit ウィジェットの 1 つだけがアクセス可能なままになり、その後他のウィジェットはマウス クリックに応答せず、中央のウィジェット全体が「スタック」します。つまり、中央のウィジェットの子である他のウィジェットは応答しません。

何故ですか?おそらくフォーカスポリシーと関係がありますか?

編集:

SpongeBobs のコメントのおかげで、カスタム クラス全体ではなくプレーンな QTextEdit 生成をテストすることを提案したところ、エラーがカスタム クラスのアイデア フィールドのどこかにあることがわかりました。では、適切な動作を得るにはどうすれば変更できますか?

#ifndef IDEAFIELD_H
#define IDEAFIELD_H

#include <QWidget>
#include <QTextEdit>
#include <QFrame>

class IdeaField : public QWidget
{
    Q_OBJECT
public:
    explicit IdeaField(QWidget *parent = 0);
    void move_all(int,int);
    void move_all(QPoint);

    QTextEdit *textField;
signals:

public slots:

};

コード:

メインウィンドウ.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setStyleSheet("background-color: white;");
    ideaPlane = new IdeaPlane(this);
    setCentralWidget(ideaPlane);

    MainWindow::createToolBars();
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::createToolBars()
{
    QToolBar * topToolBar = addToolBar(tr("Title"));
    dragIdeaButton = new dragButton(this);
    topToolBar->addWidget(dragIdeaButton);
}

ideafield.cpp: サブクラス化された QTextEdit:

#include "ideafield.h"

IdeaField::IdeaField(QWidget *parent):QWidget(parent)
{
    textField = new QTextEdit(this);
    textField->setFrameShape(QFrame::StyledPanel);
    textField->setPlainText(tr("TEST TEXT\nHURRAY!"));
}
void IdeaField::move_all(int x,int y)
{
    textField->move(x,y);
}
void IdeaField::move_all(QPoint point)
{
    textField->move(point);
}
4

0 に答える 0