Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用QListWidget的Qt命令日志_C++_C++11_Qt5_Qlistwidget_Qcheckbox - Fatal编程技术网

C++ 使用QListWidget的Qt命令日志

C++ 使用QListWidget的Qt命令日志,c++,c++11,qt5,qlistwidget,qcheckbox,C++,C++11,Qt5,Qlistwidget,Qcheckbox,我正在尝试在用户界面上构建命令日志。这意味着,当用户单击按钮、选中复选框、上载一些图像等时,基本上每次用户与用户界面交互时,操作都会记录在下面显示的QListWidget命令日志中。基本上,这就是用户运行ui时的外观: 这就是每次用户与ui交互时我试图实现的目标: 下面是构造函数中的代码片段: main window.h private: QListWidget *mNewTextSQLLog; main window.cpp MainWindow::MainWindow(QWid

我正在尝试在用户界面上构建命令日志。这意味着,当用户单击按钮、选中复选框、上载一些图像等时,基本上每次用户与用户界面交互时,操作都会记录在下面显示的
QListWidget
命令日志中。基本上,这就是用户运行ui时的外观:

这就是每次用户与ui交互时我试图实现的目标:

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

main window.h

private:
    QListWidget *mNewTextSQLLog;
main window.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();
}
这是一个
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 }");
        }
    }
}
如何做到这一点?
非常感谢您指出了正确的方向

我认为
QListWidget
不太适合用于命令日志的小部件——您可能需要使用a或a来代替。(两者之间的主要区别在于QPlainTextEdit针对显示大量文本进行了优化,但其代价是不支持QTextEdit提供的一些更奇特的文本格式功能)

一旦您创建了这两个小部件中的一个,向日志底部添加文本只需在每次要添加另一行日志文本时调用(或)小部件即可

除非您希望允许用户编辑命令日志中的文本,否则在小部件上调用
setReadOnly(true)
也是一个好主意


(如果您还希望日志视图自动滚动到底部,以便新添加的文本可见,您还可以调用
myCommandLogWidget->verticalScrollBar()->setValue(myCommandLogWidget->verticalScrollBar()->max());
添加文本后)

@Jeremy Friesner,感谢您提供了非常详细的答案。在命令日志中,我计划使用一些图标提供视觉帮助,向用户提供行动的正面或负面反馈。在我的设计中,我计划用至少7/10的图标来帮助用户。但同时我也在考虑速度。我的意思是,当用户决定上下滚动时,命令日志应该需要很长时间,特别是当有图标时。也谢谢。这个项目的最佳选择似乎是使用
QTextEdit
。非常感谢您的澄清:)请注意,这两个小部件中的任何一个都支持Unicode,因此如果您需要的图标可以作为Unicode字符提供,那么您可以使用任何一个。(有关Unicode中可用的一些图标的示例,请参见)
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 }");
        }
    }
}