使用 QListWidget 的 Qt 命令日志
Qt Command Log using QListWidget
我正在尝试在用户界面上创建一个命令日志ui。这意味着,当用户单击按钮、选中复选框、上传一些图像等时,基本上每次用户与用户界面交互时,操作都会记录在如下所示的 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();
}
或此处使用 QPushButton
:
调整 QGraphicsView
的大小
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 }");
}
}
}
如何实现?
非常感谢您指点正确的方向
我认为 QListWidget
不是用于命令日志的正确小部件——您可能想在两者之间使用 QPlainTextEdit or a QTextEdit instead. (The main difference 是因为 QPlainTextEdit 针对显示大屏幕进行了优化大量的文本,以不支持 QTextEdit 提供的一些更高级的文本格式功能为代价)
一旦您创建了这两个小部件之一,每次要添加另一行日志文本时,只需在小部件上调用 appendPlainText() (or append()) 即可将文本添加到日志底部.
除非您想允许用户编辑命令日志中的文本,否则在小部件上调用 setReadOnly(true)
也是一个好主意。
(如果你也想让log-view自动滚动到底部,让新增的文字可见,也可以在添加完文字后调用myCommandLogWidget->verticalScrollBar()->setValue(myCommandLogWidget->verticalScrollBar()->maximum());
)
我正在尝试在用户界面上创建一个命令日志ui。这意味着,当用户单击按钮、选中复选框、上传一些图像等时,基本上每次用户与用户界面交互时,操作都会记录在如下所示的 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();
}
或此处使用 QPushButton
:
QGraphicsView
的大小
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 }");
}
}
}
如何实现? 非常感谢您指点正确的方向
我认为 QListWidget
不是用于命令日志的正确小部件——您可能想在两者之间使用 QPlainTextEdit or a QTextEdit instead. (The main difference 是因为 QPlainTextEdit 针对显示大屏幕进行了优化大量的文本,以不支持 QTextEdit 提供的一些更高级的文本格式功能为代价)
一旦您创建了这两个小部件之一,每次要添加另一行日志文本时,只需在小部件上调用 appendPlainText() (or append()) 即可将文本添加到日志底部.
除非您想允许用户编辑命令日志中的文本,否则在小部件上调用 setReadOnly(true)
也是一个好主意。
(如果你也想让log-view自动滚动到底部,让新增的文字可见,也可以在添加完文字后调用myCommandLogWidget->verticalScrollBar()->setValue(myCommandLogWidget->verticalScrollBar()->maximum());
)