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);
}