Qt的命令日志使用QListWidget(Qt Command Log using QListWid

2019-10-28 13:48发布

我想建立一个用户界面上的命令日志。 这意味着,当用户点击一个按钮,检查框,上传一些图片等,基本上是用户与用户界面的动作被记录在内部交互每次QListWidget如下命令日志。 基本上,这是UI如何,只要用户运行它的样子:

而这也正是我尽量做到每次用户与UI交互:

下面从构造函数的代码片段:

mainwindow.h

private:
    QListWidget *mNewTextSQLLog;

mainwindow.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    mDockWidget_A = new QDockWidget(QLatin1String("Command Log"));
    mDockWidget_A->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
    mDockWidget_A->setMinimumHeight(30);
    // Adding object to the DockWidget
    mNewText = new QListWidget;
    mNewText->setStyleSheet("background-color: light grey;");
    mNewText->setMinimumHeight(50);
    mNewText->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    mDockWidget_A->setWidget(mNewText);
    addDockWidget(Qt::BottomDockWidgetArea, mDockWidget_A);
    resizeDocks({mDockWidget_A}, {200}, Qt::Horizontal);
}

然后将UI的一些命令,例如这里是当使用用户上传图像QPushButton和图像上的也显示QLabel

void MainWindow::imageOriginlUploadB()
{
    dir_Original_B = QFileDialog::getExistingDirectory(this, tr("Choose an image directory to load"),
                                                     filesListRight, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
    if(dir_Original_B.length() > 0){
        QImage image;
        QDir dirBObj(dir_Original_B);
        QStringList filesListRight = dirBObj.entryList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden  | QDir::AllDirs | QDir::Files, QDir::DirsFirst);
        ui->labelOrigImageB->setPixmap(QPixmap::fromImage(image.scaled(125,125,Qt::KeepAspectRatio,Qt::SmoothTransformation)));
        for ( int i = 0 ; i < filesListRight.size() ; i++ )
        {
            ui->listWidgetOriginalImgB->addItem(filesListRight.at(i));
        }
        ui->listWidgetOriginalImgB->update();
        ui->labelOrigImageB->show();
    }
}


void MainWindow::on_originalmgB_clicked()
{
    imageOriginlUploadB();
}

或者这里的调整QGraphicsView使用QPushButton

void MainWindow::on_fitViewBtn_clicked()
{
    ui->graphicsViewLX->fitInView(mLeftScene->sceneRect(), Qt::KeepAspectRatio);
    ui->graphicsViewRX->fitInView(mRightScene->sceneRect(), Qt::KeepAspectRatio);
}

这是一个激活QCheckBox

void MainWindow::on_checkBoxScreen_A_toggled(bool checked)
{
    if(ui->checkBoxScreen_A->isEnabled()) {
        if(checked)
        {
            ui->checkBoxScreen_A->setText("Active");
            ui->saveToFile_A->setEnabled(true);
            ui->saveToFile_A->setStyleSheet("QPushButton{ background-color: green }");
        }
        else {
            ui->checkBoxScreen_A->setText("Inactive");
            ui->saveToFile_A->setEnabled(false);
            ui->saveToFile_A->setStyleSheet("QPushButton{ background-color: grey }");
        }
    }
}

如何实现这一目标? 非常感谢您在正确的方向指向

Answer 1:

我觉得QListWidget是不太合适的小部件使用的命令日志-你可能想使用一个QPlainTextEdit或的QTextEdit来代替。 (主要的区别两者之间是QPlainTextEdit被用于显示大量文本优化,在不支持某些由提供的QTextEdit鸽友文本格式特征为代价)

一旦你创建了这两个部件之一,将文本添加到日志的底部,只需要调用的事appendPlainText() (或追加()要添加日志文字的另一行每次)的小工具。

除非你想允许用户编辑命令日志中的文本,调用setReadOnly(true)的小工具也是一个不错的主意。

(如果你也想在日志视图自动滚动至底部,使新添加的文本将是可见的,您也可以拨打myCommandLogWidget->verticalScrollBar()->setValue(myCommandLogWidget->verticalScrollBar()->maximum());将所述文本之后)



文章来源: Qt Command Log using QListWidget