2016-10-29 24 views
0

私はQtを使うことを学んでおり、QtのTerminal Exampleを拡張したいと思います。私は、そのconsole.cppをDesign EditorのContainersタブのQWidgetで使いたいと思います。 Qtののターミナルの例では Qt - QWidgetをQWidgetクラスに設定する

は、このクラスは次のように使用されます。

ui->setupUi(this); 
console = new Console; 
console->setEnabled(false); 
setCentralWidget(console); 

をしかし、私は小さいQWidgetの中でそれを使用したいと私はそれを設定する方法がわからない、その方法は、私がすることができますQWidgetのsetCentralWidgetと同等のものを使用しますか? Image of the Design tab with the widget I want to set to the QWidget class

複数のタブで同じQWidgetを使用することはできますか?

console.cppコードは次のとおりです。

#include "console.h" 

#include <QScrollBar> 

#include <QtCore/QDebug> 

Console::Console(QWidget *parent) 
    : QPlainTextEdit(parent) 
    , localEchoEnabled(false) 
{ 
    document()->setMaximumBlockCount(100); 
    QPalette p = palette(); 
    p.setColor(QPalette::Base, Qt::black); 
    p.setColor(QPalette::Text, Qt::green); 
    setPalette(p); 

} 

void Console::putData(const QByteArray &data) 
{ 
    insertPlainText(QString(data)); 

    QScrollBar *bar = verticalScrollBar(); 
    bar->setValue(bar->maximum()); 
} 

void Console::setLocalEchoEnabled(bool set) 
{ 
    localEchoEnabled = set; 
} 

void Console::keyPressEvent(QKeyEvent *e) 
{ 
    switch (e->key()) { 
    case Qt::Key_Backspace: 
    case Qt::Key_Left: 
    case Qt::Key_Right: 
    case Qt::Key_Up: 
    case Qt::Key_Down: 
     break; 
    default: 
     if (localEchoEnabled) 
      QPlainTextEdit::keyPressEvent(e); 
     emit getData(e->text().toLocal8Bit()); 
    } 
} 

void Console::mousePressEvent(QMouseEvent *e) 
{ 
    Q_UNUSED(e) 
    setFocus(); 
} 

void Console::mouseDoubleClickEvent(QMouseEvent *e) 
{ 
    Q_UNUSED(e) 
} 

void Console::contextMenuEvent(QContextMenuEvent *e) 
{ 
    Q_UNUSED(e) 
} 

Qtの例

は、このいずれかになります。 http://doc.qt.io/qt-5/qtserialport-terminal-example.html

本当にありがとうございました!

+0

あなたが別のウィジェット内部QTextEdit' '、たとえば、あなたが使用する方法を知っていますか?そうでない場合は、Qtの基本を学ぶために少し時間を費やすことを検討してください。私は個人的には[アドレス帳のチュートリアル](http://doc.qt.io/qt-5/tutorials-addressbook.html)を非常にポイントと簡潔にして、UIを組み立てる方法と、コンポーネント同士を結びつける。 Designerを使用している場合でも、このチュートリアルで取り上げた内容を理解して、プログラムで何が起こっているのかを理解する必要があります。 – hyde

答えて

0

デザイナーで追加したい場合は、スクリーグラブに追加したQWidgetを宣伝してください。 (右クリック> "Promote to ...">コンソールヘッダーへのパス&の名前を入力してください)。

か昇進を使用して、あなたはコード内のレイアウトにコンソールを追加することができます。

Console* console = new Console(); 
ui->your_layout_name_here->addWidget(console); 
関連する問題