2017-01-12 29 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 
    } 
};