第一个要说的是QListWidget。这个类为我们展示一个List列表的视图。下面还是先看代码:
listwidget.h
#ifndef LISTWIDGET_H
#define LISTWIDGET_H
#include <QtGui>
class ListWidget : public QWidget
{
public:
ListWidget();
private:
QLabel *label;
QListWidget *list;
};
#endif // LISTWIDGET_H
#define LISTWIDGET_H
#include <QtGui>
class ListWidget : public QWidget
{
public:
ListWidget();
private:
QLabel *label;
QListWidget *list;
};
#endif // LISTWIDGET_H
listwidget.cpp
#include
"listwidget.h"
ListWidget::ListWidget()
{
label = new QLabel;
label->setFixedWidth(70);
list = new QListWidget;
list->addItem( new QListWidgetItem(QIcon( ":/images/line.PNG"), tr( "Line")));
list->addItem( new QListWidgetItem(QIcon( ":/images/rect.PNG"), tr( "Rectangle")));
list->addItem( new QListWidgetItem(QIcon( ":/images/oval.PNG"), tr( "Oval")));
list->addItem( new QListWidgetItem(QIcon( ":/images/tri.PNG"), tr( "Triangle")));
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(label);
layout->addWidget(list);
setLayout(layout);
connect(list, SIGNAL(currentTextChanged(QString)), label, SLOT(setText(QString)));
}
ListWidget::ListWidget()
{
label = new QLabel;
label->setFixedWidth(70);
list = new QListWidget;
list->addItem( new QListWidgetItem(QIcon( ":/images/line.PNG"), tr( "Line")));
list->addItem( new QListWidgetItem(QIcon( ":/images/rect.PNG"), tr( "Rectangle")));
list->addItem( new QListWidgetItem(QIcon( ":/images/oval.PNG"), tr( "Oval")));
list->addItem( new QListWidgetItem(QIcon( ":/images/tri.PNG"), tr( "Triangle")));
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(label);
layout->addWidget(list);
setLayout(layout);
connect(list, SIGNAL(currentTextChanged(QString)), label, SLOT(setText(QString)));
}
main.cpp
#include <QtGui>
#include "listwidget.h"
int main( int argc, char *argv[])
{
QApplication a(argc, argv);
ListWidget lw;
lw.resize(400, 200);
lw.show();
return a.exec();
}
#include "listwidget.h"
int main( int argc, char *argv[])
{
QApplication a(argc, argv);
ListWidget lw;
lw.resize(400, 200);
lw.show();
return a.exec();
}
一共三个文件,但是都比较清晰。我们先建立了一个ListWidget类,然后在main函数中将其显示出来。
ListWidget类中包含一个QLabel对象和一个QListWidget对象。创建这个QListWidget对象很简单,只需要使用new运算符创建出来,然后调用addItem()函数即可将item添加到这个对象中。我们添加的对象是QListWidgetItem的指针,它有四个重载的函数,我们使用的是其中的一个,它接受两个参数,第一个是QIcon引用类型,作为item的图标,第二个是QString类型,作为这个item后面的文字说明。当然,我们也可以使用insertItem()函数在特定的位置动态的增加item,具体使用请查阅API文档。最后,我们将这个QListWidget的currentTextChanged()信号同QLabel的setText()连接起来,这样,在我们点击item的时候,label上面的文字就可以改变了。
我们还可以设置viewModel这个参数,来确定使用不同的视图进行显示。比如,我们使用下面的语句:
list->setViewMode(QListView::IconMode);
再来看看程序界面吧
QListWidget可以显示一个清单,清单中的每个项目是QListWidgetItem的一个实例,每个项目可以通过QListWidgetItem来操作。可以通过QListWidgetItem来设置每个项目的图像与文字。下面说明3个例子,一个例子只显示文字,一个例子显示文字和图标,最后一个例子增加每个项的选择的信号。
例子1:
- #include <QApplication>
- #include <QWidget>
- #include <QVBoxLayout>
- #include <QListWidget>
- #include <QListWidgetItem>
- int main(int argc, char** argv)
- {
- QApplication app(argc, argv);
- QWidget* widget = new QWidget;
- QListWidget* listWidget = new QListWidget;
- QVBoxLayout* layout = new QVBoxLayout;
- QListWidgetItem* lst1 = new QListWidgetItem("data", listWidget);
- QListWidgetItem* lst2 = new QListWidgetItem("decision", listWidget);
- QListWidgetItem* lst3 = new QListWidgetItem("document", listWidget);
- QListWidgetItem* lst4 = new QListWidgetItem("process", listWidget);
- QListWidgetItem* lst5 = new QListWidgetItem("printer", listWidget);
- listWidget->insertItem(1, lst1);
- listWidget->insertItem(2, lst2);
- listWidget->insertItem(3, lst3);
- listWidget->insertItem(4, lst4);
- listWidget->insertItem(5, lst5);
- listWidget->show();
- layout->addWidget(listWidget);
- widget->setLayout(layout);
- widget->show();
- app.exec();
- }
运行如下图:
第2个例子:
- #include <QApplication>
- #include <QWidget>
- #include <QVBoxLayout>
- #include <QListWidget>
- #include <QListWidgetItem>
- int main(int argc, char** argv)
- {
- QApplication app(argc, argv);
- QWidget* widget = new QWidget;
- QListWidget* listWidget = new QListWidget;
- QVBoxLayout* layout = new QVBoxLayout;
- QListWidgetItem* lst1 = new QListWidgetItem(QIcon("images/data.png"), "data", listWidget);
- QListWidgetItem* lst2 = new QListWidgetItem(QIcon("images/decision.png"), "decision", listWidget);
- QListWidgetItem* lst3 = new QListWidgetItem(QIcon("images/document.png"), "document", listWidget);
- QListWidgetItem* lst4 = new QListWidgetItem(QIcon("images/process.png"), "process", listWidget);
- QListWidgetItem* lst5 = new QListWidgetItem(QIcon("images/printer.png"), "printer", listWidget);
- listWidget->insertItem(1, lst1);
- listWidget->insertItem(2, lst2);
- listWidget->insertItem(3, lst3);
- listWidget->insertItem(4, lst4);
- listWidget->insertItem(5, lst5);
- listWidget->show();
- layout->addWidget(listWidget);
- widget->setLayout(layout);
- widget->show();
- app.exec();
- }
运行如下图:
第3个例子:
- #include <QApplication>
- #include <QWidget>
- #include <QHBoxLayout>
- #include <QListWidget>
- #include <QListWidgetItem>
- #include <QLabel>
- int main(int argc, char** argv)
- {
- QApplication app(argc, argv);
- QWidget* widget = new QWidget;
- QListWidget* listWidget = new QListWidget;
- QHBoxLayout* layout = new QHBoxLayout;
- QLabel* label = new QLabel;
- label->setFixedWidth(100);
- QListWidgetItem* lst1 = new QListWidgetItem(QIcon("images/data.png"), "data", listWidget);
- QListWidgetItem* lst2 = new QListWidgetItem(QIcon("images/decision.png"), "decision", listWidget);
- QListWidgetItem* lst3 = new QListWidgetItem(QIcon("images/document.png"), "document", listWidget);
- QListWidgetItem* lst4 = new QListWidgetItem(QIcon("images/process.png"), "process", listWidget);
- QListWidgetItem* lst5 = new QListWidgetItem(QIcon("images/printer.png"), "printer", listWidget);
- listWidget->insertItem(1, lst1);
- listWidget->insertItem(2, lst2);
- listWidget->insertItem(3, lst3);
- listWidget->insertItem(4, lst4);
- listWidget->insertItem(5, lst5);
- QObject::connect(listWidget, SIGNAL(currentTextChanged(const QString &)), label, SLOT(setText(const QString &)));
- listWidget->show();
- layout->addWidget(listWidget);
- layout->addWidget(label);
- widget->setLayout(layout);
- widget->show();
- app.exec();
- }
运行如下图: