我一直在尝试使文本编辑能够更改其字体以及粗体和斜体之类的内容。我试图通过促进文本编辑和组合框来添加字体方法来做到这一点,但出现错误C2039'setText'不是'editor'的成员,该成员不是textedit的提升小部件类。我在设计器中对其进行了推广,以添加用于粗体和斜体的广告位。我设置了基类,但是它不能执行该类的一些基本操作。我该如何解决?

编辑器

#ifndef EDITOR_H
#define EDITOR_H
#include <QWidget>
#include <QTextEdit>
class Editor: public QWidget
{
    Q_OBJECT

public:
    explicit Editor(QWidget *parent = 0);
signals:

public slots:

};

#endif // EDITOR_H


主窗口

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QTextStream>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

}


void MainWindow::on_actionOpen_triggered()
{
        ...
        //Line with error
        ui->texteditor->setText(in.readAll());
        file.close();
    }
}

void MainWindow::on_actionSave_triggered()
{
             ....
            //other line with error
            stream << ui->texteditor->toPlainText();
            stream.flush();
            file.close();
        }
    }
}

最佳答案

如果QTextEdit不继承自Editor,则不能将Editor升级为QTextEdit。升级依赖于标准C ++继承。您正在尝试创建一个通用类,该类可用于将功能附加到几种现有的小部件类型。除非您更改了要向其添加功能的小部件的通用基类,否则这是不可能的(可能是QWidget)。

setItalicsetBold插槽添加到一组小部件的一些选择是:


更改Qt源代码以将新功能添加到QTextEditQComboBox的通用基类中
为要扩展的每个小部件创建一个新的Editor类,该小类继承自每个类。
不要依靠继承来解决问题。


1有很多原因,这是一个糟糕的解决方案,所以我什至不谈论它。如果您只有几种想要具有扩展功能的窗口小部件类型,则2可以工作,否则,可能需要很多重复的代码。

但是,我认为最好的方法可能是在信号处理程序中为要设置斜体和粗体设置的任何信号做一些额外的工作。

我猜你只是想写:

connect(<some_object>, <some_signal>, ui->textEdit, SLOT(setItalic(bool)));


也许代替直接连接,而是编写一个快速函数,该函数不依赖setBoldsetItalic的特殊功能,而只是使用标准的QWidget设施:

connect(<some_object>, <some_signal>, this, SLOT(on_some_signal()));

//...

void on_some_signal()
{
    QFont fnt = ui->textEdit->font();
    fnt.setItalic(true);
    ui->textEdit->setFont(fnt);
}

关于c++ - 为什么我的升级小部件不能使用基类函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31778057/

10-16 21:58