Журнал команд Qt с использованием QListWidget - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь создать журнал команд на интерфейсе пользователя. Это означает, что когда пользователь нажимает кнопку, ставит флажок, загружает некоторые изображения и т. Д., В основном каждый раз, когда пользователь взаимодействует с пользовательским интерфейсом, действие записывается в журнале команд QListWidget, показанном ниже. По сути, так выглядит пользовательский интерфейс, как только пользователь запускает его:

start

И это то, чего я пытаюсь достичь каждый раз, когда пользователь взаимодействует с пользовательским интерфейсом:

command_log

Ниже фрагменты кода из конструктора:

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);
}

И затем некоторые команды пользовательского интерфейса, например, здесь, когда пользователь загружает изображения, используя 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 }");
        }
    }
}

Как этого добиться? Большое спасибо за указание в правильном направлении

1 Ответ

1 голос
/ 22 марта 2019

Я думаю, QListWidget не совсем подходящий виджет для использования в журнале команд - вы, вероятно, захотите использовать вместо него QPlainTextEdit или QTextEdit . (Основное различие между ними заключается в том, что QPlainTextEdit оптимизирован для отображения больших объемов текста, за счет того, что он не поддерживает некоторые из более интересных функций форматирования текста, предоставляемых QTextEdit) *

После того как вы создали один из этих двух виджетов, добавление текста в конец журнала - это просто вызов appendPlainText () (или append () ) на виджет каждый раз, когда вы хотите добавить еще одну строку текста журнала.

Если вы не хотите, чтобы пользователь мог редактировать текст в журнале команд, вызов setReadOnly(true) для виджета также является хорошей идеей.

(Если вы также хотите, чтобы представление журнала автоматически прокручивалось вниз, чтобы вновь добавленный текст был виден, вы также можете вызвать myCommandLogWidget->verticalScrollBar()->setValue(myCommandLogWidget->verticalScrollBar()->maximum()); после добавления текста)

...