Qt -使用QWidget类设置QWidget

Qt - set QWidget with a QWidget class

本文关键字:QWidget 设置 使用 Qt      更新时间:2023-10-16

我正在学习使用Qt,我想扩展Qt的终端示例。我想在设计编辑器的de Containers选项卡中的QWidget中使用它的console.cpp。

在Qt的终端示例中,该类是这样使用的:

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

但是当我想在一个较小的QWidget中使用它时,我不知道如何设置它,我可以使用哪个方法作为setCentralWidget的等效方法?我想要设置为QWidget类的小部件的Design选项卡的图像

我也可以在几个选项卡中使用相同的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

非常感谢!

如果您想通过设计器添加它,只需推广您在截屏中添加的QWidget。(右击>"推广到…")>填写姓名&控制台头的路径)。

或者不使用提升,您可以在代码中将控制台添加到布局中:

Console* console = new Console();
ui->your_layout_name_here->addWidget( console );