动态添加的小部件在Qt中无法访问

时间:2013-08-13 08:27:31

标签: c++ qt

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

0 个答案:

没有答案