2017-01-12 30 views
0

我有一个简单的应用程序与文本编辑 - QPlainTextEdit,由qt设计师创建。我只需要从mainwindow.cpp setViewportMargins.But我得到以下错误消息 - 无效QAbstractScrollArea :: setViewportMargins(int,int,int,int)'受保护。QPlainTextEdit - setViewportMargins,protected

代码:

ui->textEdit->setViewportMargins(10,10,10,10); 

有没有办法做到这一点?

+0

你在哪里调用这个函数?请给更多的信息 – Youssef

+0

从manwindow.cpp文件。我只需要从mainwindow.cpp中改变textEdit的边距。 – charles

回答

0

保护功能只能在类中被使用,所以它产生的错误。我已经通过设计CustomPlainText课程并将其推广到原来的QPlainTextEdit来解决它,其中我使用了setViewportMargins (10,10,10,10);。如果你想从课堂外访问该功能,我已经创建了功能CustomSetViewportMargins({args})

点击右键并选择:推广到...

enter image description here

编写类和头的名称,并添加它。

enter image description here

,并按推广。

enter image description here

customplaintext.cpp

#ifndef CUSTOMPLAINTEXT_H 
#define CUSTOMPLAINTEXT_H 

#include <QPlainTextEdit> 

class CustomPlainText:public QPlainTextEdit 
{ 
    Q_OBJECT 
public: 
    CustomPlainText(QWidget * parent = 0); 
    void CustomSetViewportMargins(int left, int top, int right, int bottom); 
    void CustomSetViewportMargins(const QMargins & margins); 
}; 

#endif // CUSTOMPLAINTEXT_H 

customplaintext.h

#include "customplaintext.h" 

CustomPlainText::CustomPlainText(QWidget *parent): QPlainTextEdit(parent) 
{ 
    setViewportMargins(10,10,10,10); 
} 

void CustomPlainText::CustomSetViewportMargins(int left, int top, int right, int bottom) 
{ 
    setViewportMargins(left, top, right, bottom); 
} 

void CustomPlainText::CustomSetViewportMargins(const QMargins & margins) 
{ 
    setViewportMargins(margins); 
} 

前:

enter image description here

后:

enter image description here

完整代码:https://github.com/eyllanesc/stackoverflow/tree/master/CustomPlainTextProject

+0

谢谢你的回答。我需要按时间改变保证金。所以从mainwindow.cpp调用具有右边界值的参数。可能吗? – charles

+0

@charles 当然有可能,只需编写一个函数并将这些参数发送到受保护的函数。在一会儿我会添加这些功能 – eyllanesc

+0

谢谢。我添加了CustomPlainText customText; customText.CustomSetViewportMargins(10,10,10,10);进入mainwindow.cpp文件并没有发生任何事情(边距仍然为0)。我在qt和C++中很新。 – charles

1

为了使用QPlainTextEdit的保护方法,你需要继承它,像这样:

class MyPlainTextEdit: public QPlainTextEdit 
{ 
    Q_OBJECT 
public: 
    MyPlainTextEdit(QWidget* parent=0):QPlainTextEdit(parent){} 
    //ADD A PUBLIC METHOD 
    void publicSetViewportMargins(int left, int top, int right, int bottom) 
    { 
     setViewportMargins(left ,top, right, bottom); 
    } 
    //OR 
protected: 
    void setViewportMargins(int left, int top, int right, int bottom) 
    { 
     //REIMPLEMENT METHOD HERE 
    } 
};