首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在QListWidget中显示一个QStringList、一个QLabel和另一个QString的每一项?

如何在QListWidget中显示一个QStringList、一个QLabel和另一个QString的每一项?
EN

Stack Overflow用户
提问于 2018-06-26 01:03:18
回答 2查看 1.1K关注 0票数 2

我从文件夹中检索文件列表。对于每个文件,我想放入它的日期(QString)和一个QLabel。对于每个文件,这三个元素将放入一个QListWidget中。我正确地恢复了所有的文件和日期。问题是这两个元素在两个不同的项目中。此外,使用这种方法,我不能将QLabel放在QListWidget中。

下面是我的代码:

viewList.h:

代码语言:javascript
复制
class viewList : public QWidget{
Q_OBJECT

public:
viewList();
QString getDate();

private:
QGridLayout *gridlayout;
QHBoxLayout *hboxList;
QVBoxLayout *vboxlist;
QPushButton *button;
QLabel *myLabel;
QListWidget *listwidget;

};

viewList.cpp:

代码语言:javascript
复制
viewList::viewList(){

gridlayout=new QGridLayout;
vboxlist=new QVBoxLayout;
hboxList=new QHBoxLayout;
//Button is outside the list 
button=new QPushButton("test",this);
myLabel=new QLabel("ok",this);

QString path="/home/myFolder";
listwidget=new QListWidget;

foreach(QString file, files){
    listwidget->addItem(file);
    listwidget->addItem(getDate());
}
vboxlist->addWidget(listwidget);
gridlayout->addWidget(button,0,0,1,1);
gridlayout->addLayout(vboxlist,1,0,1,1);
this->setLayout(gridlayout);

}

QString viewList::getDate(){
  return QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
}

我的三个问题是,如果我做listwidget-> addItem (myLabel),它没有work.In添加,我想把文件和标签放在一个QHBoxLayout中,把QHBoxLayout放在一个QVBoxLayout中。但是用我的方法我做不到。最后,我希望QLabel,QString (日期)和QString (文件)在同一项目中。

有谁知道用​​来做这件事的方法吗?现在,我只在两个不同的项目中显示文件和日期。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-26 01:59:31

尝试:

代码语言:javascript
复制
 QString widgetItem;
 widgetItem = file +" "+ getDate() +" "+ (label->text());
 listwidget->addItem(widgetItem);

更新:

代码语言:javascript
复制
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include<QDebug>
#include<QHBoxLayout>
#include<QWidget>
#include<QLabel>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
    ui->setupUi(this);

}
MainWindow::~MainWindow()
{
    delete ui;
}



void MainWindow::on_pushButton_clicked()
{
//Creating our widget for composing
QWidget* window = new QWidget();
//Creating a new label
QLabel *label = new QLabel();
label->setText("MyLable");
label->setAlignment(Qt::AlignCenter);
 //Creating a new button for crowding
QPushButton* button = new QPushButton("hey");

//Creating a new list widget item whose parent is the listwidget itself
QListWidgetItem* item;
item = new QListWidgetItem(ui->listWidget);
item->setSizeHint(QSize(0,30)); // you could change it

//Creating layout for our label and etc...
QHBoxLayout* layout = new QHBoxLayout();
//Adding elements to layout
layout->addWidget(label);
layout->addWidget(button); // just for example
layout->setAlignment(label,Qt::AlignCenter);
layout->setAlignment(button,Qt::AlignCenter);
layout->addStretch();
window->setLayout(layout);

//Adding the item to the listwidget
ui->listWidget->addItem(item);

ui->listWidget->setItemWidget(item,window);

QString widgetText;
QString fileName = "fileName";
widgetText= fileName +" "+ "Date";

item->setText(str);
item->setTextAlignment(Qt::AlignRight|Qt::AlignCenter);

//setting style for label in listWidget
label->setStyleSheet("color: white; background: red;");

}当您单击按钮时,我会创建一个新项目。

UPD2:

代码语言:javascript
复制
QStringList files;
files<<"file1"<<"file2"<<"file3";
foreach (QString file, files) {
     QLabel *labelDate = new QLabel();
     QLabel *labelFile = new QLabel();
     QLabel *Mylabel = new QLabel();
     Mylabel->setText("Something");
     labelDate->setText("someDate");
     labelFile->setText(file);
     labelDate->setStyleSheet("color: white; background: red;");
     labelFile->setStyleSheet("color: white; background: red;");
     Mylabel->setStyleSheet  ("color: white; background: red;");


QWidget* window = new QWidget();
QListWidgetItem *item = new QListWidgetItem(ui->listWidget);

item->setSizeHint(QSize(0,30)); // you could change it

//Creating layout for our label and etc...
QHBoxLayout* layout = new QHBoxLayout();
//Adding elements to layout
layout->addWidget(labelDate);
layout->addWidget(labelFile); // just for example
layout->addWidget(Mylabel);
layout->addStretch();
window->setLayout(layout);
ui->listWidget->addItem(item);
ui->listWidget->setItemWidget(item,window);

}
票数 3
EN

Stack Overflow用户

发布于 2018-06-26 15:59:27

对于包含多个列的项目列表,我发现QTreeWidget更适合。您只是没有使用分层特性(所有条目都是topLevelItems)。

这允许表格模型的所有优点:每个字段的样式表,不同的基本QVariant类型,每个列的排序,嵌入图像等。

使用QTableWidget更加困难,因为每个字段都是不同的项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51028542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档