我从文件夹中检索文件列表。 对于每个文件,我想放置其日期(QString)和QLabel。 对于每个文件,这三个元素将放在QListWidget中。 我正确地恢复了所有文件和日期。问题在于这两个元素在两个不同的项目中。而且,使用这种方法,我无法将QLabel放在QListWidget中。
这是我的代码:
viewList.h:
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:
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),它将无法正常工作。此外,我想将文件和标签放在QHBoxLayout中,并将QHBoxLayout放在QVBoxLayout中。但是用我的方法我做不到。最后,我希望QLabel,QString(日期)和QString(文件)位于同一项目中。
有人会想到这样做的方法吗?现在,我只在两个不同的项目中显示文件和日期。
答案 0 :(得分:3)
尝试:
QString widgetItem;
widgetItem = file +" "+ getDate() +" "+ (label->text());
listwidget->addItem(widgetItem);
UPD:
#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:
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);
}
答案 1 :(得分:0)
对于具有多列的项目列表,我发现QTreeWidget
更适合。您只是不使用分层功能(所有条目都是topLevelItems)。
这提供了表格模型的所有优点:每个字段的样式表,不同的基本QVariant类型,每列排序,嵌入图像等...
使用QTableWidget
更加困难,因为每个字段都是不同的项目。