我有一个子类 QToolButton(在使用 addToolBar() 添加到主窗口的工具栏中)作为“拖放按钮”在作为 QWidget 的 QMainWindow 的中央小部件上动态生成子类 QWidgets(仅包含 1 个 QTextEdit)。拖放工作正常。
但是,除非用户以非常特定的顺序访问它们,否则只有一个 QTextEdit 小部件保持可访问性,之后其他小部件不响应鼠标单击,并且整个中央小部件“卡住”。我的意思是任何其他作为中央小部件子级的小部件都没有响应。
这是为什么?这可能与焦点政策有关吗?
编辑:
感谢 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:
};
代码:
主窗口.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);
}