0

我有一个子类 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);
}
4

0 回答 0