我有一个子类QToolButton(在一个工具栏中添加到主窗口,带有addToolBar()),它作为一个“拖放按钮”动态生成QMainWindow的中央Widget上的子类化QWidgets(只包含1个QTextEdit)。一个QWidget。拖放效果很好。
然而,除非用户以非常特定的顺序访问它们,否则只有一个QTextEdit小部件可以访问,之后其他小部件不响应鼠标点击并且整个中央Widget被“卡住”。 我的意思是,任何其他小部件都是中央小部件的孩子都没有反应。
为什么?它可能与焦点政策有关吗?
修改
感谢SpongeBobs评论,他建议测试普通的QTextEdit而不是整个自定义类,我们知道错误是在自定义类ideafield中的某个地方。那么如何更改它以获得适当的行为?
#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:
};
代码:
mainwindow.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);
}